首页 > 其他分享 >promise

promise

时间:2023-07-23 17:24:16浏览次数:48  
标签:promises resolve 完成 Promise result 数组 promise

Promise.all 是一个静态方法,用于处理多个 Promise 对象。它会接收一个 Promise 对象数组作为参数,返回一个新的 Promise 对象,该 Promise 对象在所有 Promise 对象已完成时才会完成,并携带着所有 Promise 对象完成的结果(按照 Promise 对象数组顺序)。

以下是实现一个简单的 Promise.all 的核心代码:

function PromiseAll(promises) {
  return new Promise((resolve, reject) => {
    const result = [];
    let count = 0;
    for (let i = 0; i < promises.length; i++) {
      promises[i]
        .then(res => {
          result[i] = res; // 将 Promise 结果存入数组
          count++; // 记录已完成的 Promise 数量
          if (count === promises.length) {
            resolve(result); // 当所有 Promise 都完成时,返回结果
          }
        })
        .catch(err => {
          reject(err); // 有一个 Promise 出错即返回错误信息
        });
    }
  });
}

这个 PromiseAll 函数实现的流程是:

  1. 接收 Promise 数组作为参数
  2. 创建一个数组 result,用于存储所有 Promise 完成的结果
  3. 创建一个计数器 count,用于记录已完成的 Promise 数量
  4. 循环遍历 Promise 数组,对每个 Promise 进行操作
  5. 当 Promise 完成后,将结果存入 result 数组,并将计数器加 1,同时判断是否所有 Promise 都完成
  6. 当所有 Promise 都完成时,调用 resolve 函数,将 result 数组作为参数返回,否则不做任何操作
  7. 出现错误时,调用 reject 函数,返回错误信息。

可以使用以下代码测试 PromiseAll 函数是否实现正确:

const promise1 = Promise.resolve(1);
const promise2 = Promise.resolve('hello');
const promise3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('world');
  }, 1000);
});

PromiseAll([promise1, promise2, promise3])
  .then(res => console.log(res)) // [1, 'hello', 'world']
  .catch(err => console.log(err));

标签:promises,resolve,完成,Promise,result,数组,promise
From: https://www.cnblogs.com/kitebear/p/17570187.html

相关文章

  • 手写一个Promise
    Promise背景JavaScript这种单线程事件循环模型,异步行为是为了优化因计算量大而时间长的操作。在JavaScript中我们可以见到很多异步行为,比如计时器、ui渲染、请求数据等等。Promise的主要功能,是为异步代码提供了清晰的抽象,支持优雅地定义和组织异步逻辑。可以用Promise表示异步......
  • Promise
    Promise是一种用于处理异步操作的对象(解决了回调地狱的问题)它有三种状态:pedding(进行中)    resolve(已成功)   rejected(已失败) pedding =>resolve 或 pedding=>rejected(状态一旦变更,就无法再次变更了,是什么就是什么了,板上钉钉)了解Promise前可以在......
  • JavaScript学习 -- Promise的使用
    在JavaScript中,Promise是一种用于处理异步操作的对象。它表示某个异步操作的最终完成或失败,并提供了一种优雅的方式来处理异步操作的结果。本文将介绍JavaScript如何使用Promise,并提供一个实际的例子。什么是PromisePromise是一种异步操作的解决方案,它有三种状态:pending(等待)、re......
  • antd from 表单中的key 不能绑定input中的字段 Input.js:207 Uncaught (in promise)
    <Formclass="NewVersion"ref="formRef"name="NewVersion":model="formData"><Spacev-for="(newPg,index)informData.version":key="index"style="dis......
  • 如何解决返回[object Promise]标准答案
    constmyPromise=newPromise((resolve,reject)=>{//执行异步操作//当操作完成时调用resolve()或reject()});myPromise.then(result=>{//在Promise被解析时执行的回调函数console.log(result);//输出Promise的值}).catch(error=>{//在Promise被拒绝时执......
  • JS中使用Promise.all控制所有的异步请求都完成后,在执行后续逻辑
    使用场景为,在js中连续的几个异步耗时操作,后面的耗时操作需要使用第一个操作的返回结果。例如调用ajax异步接口,需要先创建完主表,然后拿到主表id在去循环创建明细表,等全部创建完成后,弹出提示来,或者失败提示。通常情况,在耗时操作完成后在去调用,需要将异步方法转成同步方法,结合回调函......
  • C#之Promise
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceInterview.libs{///<summary>///Promise状态///</summary>enumPromiseStat......
  • vue3使用表格el-table-infinite-scroll.js:18 Uncaught (in promise) Error: [el-tabl
    先看下表格里面有没有这个el-scrollbar__wrapclass类 没有的话升级一下element-plus到最新的就行你可以先查看element-plus的版本npmview element-plus下载完之后 就有了......
  • std::future、std::promise、std::packaged_task、std::async
    std::promisestd::promise:用于获取线程中变量的结果,如下:#include<iostream>#include<thread>#include<future>voidprintMessage(std::promise<std::string>&&prms,std::stringmessage){std::this_thread::sleep_for(std::chrono::sec......
  • 【Netty】「萌新入门」(四)异步编程模型:利用 Future 和 Promise 提高性能与响应能力
    前言本篇博文是《从0到1学习Netty》中入门系列的第四篇博文,主要内容是介绍Netty中Future与Promise的使用,通过使用异步的方式提高程序的性能和响应速度,往期系列文章请访问博主的Netty专栏,博文中的所有代码全部收集在博主的GitHub仓库中;为什么要使用异步?使用异步编程模式......