首页 > 其他分享 >Promise 静态 API 的使用方法

Promise 静态 API 的使用方法

时间:2022-08-15 10:33:32浏览次数:48  
标签:resolve responses 静态 API Promise let response users

Promise.all

使用场景:假设我们希望许多 Promise 并行执行,并等待它们都准备好。

一个实际例子是:并行下载多个 URL,并在这些 URL 全部下载完成后,再进行后续的业务逻辑处理。

语法:

let promise = Promise.all(iterable);

Promise.all 接受一个 iterable 对象(通常是一组 Promise)并返回一个新的 Promise.

当所有列出的 Promise 都 resolve 后,新的 Promise 也将 resolve,并且它们的结果数组成为新的 Promise 对象的结果。

例如,下面的 Promise.all 在 3 秒后状态变为 fulfilled,然后它的结果是一个数组 [1, 2, 3]:

Promise.all([
  new Promise(resolve => setTimeout(() => resolve(1), 3000)), // 1
  new Promise(resolve => setTimeout(() => resolve(2), 2000)), // 2
  new Promise(resolve => setTimeout(() => resolve(3), 1000))  // 3
]).then(alert); // 1,2,3 when promises are ready: each promise contributes an array member

请注意,结果数组成员的顺序与其源承诺中的顺序相同。 尽管第一个 Promise 需要最长的时间来解决,但它仍然是结果数组中的第一个。

一个常见的技巧是将一组作业数据映射到一组 Promise 中,然后将其包装到 Promise.all 中。

例如,如果我们有一个 URL 数组,我们可以像这样获取它们:

let urls = [
  'https://api.github.com/users/iliakan',
  'https://api.github.com/users/remy',
  'https://api.github.com/users/jeresig'
];

// map every url to the promise of the fetch
let requests = urls.map(url => fetch(url));

// Promise.all waits until all jobs are resolved
Promise.all(requests)
  .then(responses => responses.forEach(
    response => alert(`${response.url}: ${response.status}`)
  ));

在调试器里,看到 requests 数组最开始的三个元素,状态全是 pending:

看到 requests 变成 状态后,传入 then 的结果数组:

一旦执行到 then 方法之后,状态变为 fulfilled:

一个实际的使用 Promise.all 一次并发读取多个 Github user 记录的例子:

let names = ['iliakan', 'remy', 'jeresig'];

let requests = names.map(name => fetch(`https://api.github.com/users/${name}`));

Promise.all(requests)
  .then(responses => {
    // all responses are resolved successfully
    for(let response of responses) {
      alert(`${response.url}: ${response.status}`); // shows 200 for every url
    }

    return responses;
  })
  // map array of responses into an array of response.json() to read their content
  .then(responses => Promise.all(responses.map(r => r.json())))
  // all JSON answers are parsed: "users" is the array of them
  .then(users => users.forEach(user => alert(user.name)));

标签:resolve,responses,静态,API,Promise,let,response,users
From: https://www.cnblogs.com/sap-jerry/p/16587368.html

相关文章

  • Promise.all API 的出错处理
    Promise.all使用场景:假设我们希望许多Promise并行执行,并等待它们都准备好。一个实际例子是:并行下载多个URL,并在这些URL全部下载完成后,再进行后续的业务逻辑处理。......
  • 如果让我设计一套,TPS百万级API网关!
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • 如果让我设计一套,TPS百万级API网关!
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • Node.js + Express + Knex 开发 API 接口
    安装依赖包npmiexpressknexmysql2这是Knex官方文档地址:Knex.js-SQLquerybuilder。搭建接口config.js新建一个config.js文件,专门写knex的配置:importk......
  • Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。
    系列目录1、Taurus.MVCWebAPI 入门开发教程1:框架下载环境配置与运行。2、Taurus.MVCWebAPI入门开发教程2:添加控制器输出HelloWorld。3、Taurus.MVCWebAPI入门开......
  • Django-rest-framework开发api接口
    django-rest-framework开发api接口(1)创建django项目drfdemo1并且创建一个名为app的应用django-adminstartprojectdrfdemo1pythonmanage.pystartappapp(2)安......
  • 稳定好用的短连接生成平台,支持API批量生成
    ​https://www.5w.fit/   01安全:快码拥有两种模式:防封模式和极速模式,防封模式使短链更加安全!02无流量劫持:快码短链绝不劫持流量!03极速:专属大量服务器,支持......
  • 常用API(七)
    包装类基本数据类型对应的引用类型(把基本数据类型变成了对象)如何理解包装类 基本数据类型包装类byteByteshortShortcharCharacterintInteger......
  • MinimalAPI---部署项目到IIS
    1.安装IIS,详情见:https://product.pconline.com.cn/itbk/vedio/1903/12395139.html2.安装ASP.NETCore运行时环境和程序包下载HostingBundle文件 安装包下载地址:https......
  • Ubuntu 20.04 配置静态IP地址
    vim/etc/netplan/00-installer-config.yaml#Thisisthenetworkconfigwrittenby'subiquity'network:ethernets:ens160:dhcp4:noaddresse......