首页 文章

我需要返回一个`Promise`,当`input` *中的所有promise都被解决时(意味着,要么被解决要么被拒绝),它就会被实现[复制]

提问于
浏览
-4

这个问题在这里已有答案:

promise24tle必须返回一个 Promise ,当 input 中的所有承诺都已解决时(意味着,已解决或被拒绝),它将被满足 .

履行值将是一个对象数组,每个对象具有以下签名:

  • @typedef {对象}结算

  • @property isFulfilled - 承诺是否已解决

  • @property isRejected - 承诺是否被拒绝

  • @property {* =} value - 用于解析promise的值(如果有)

  • @property {* =} reason - 拒绝承诺的原因(如果有的话)

  • @param {Array . >}输入 - 一组Promises

  • @return {承诺 . >}

function promiseSettle(input) {
    let promiseArray = [];
    for (let i = 0; i < input.length; i++) {
        Promise.resolve(input[i]).then(output => {
            promiseArray.push(output);
            console.log(promiseArray);
        }, reason => {
            promiseArray.push(reason);
        })    
    }
}

// testing data
var p1 = new Promise((resolve, reject) => {
    setTimeout(reject, 1, "first promise of 1 sec");
});
var p2 = new Promise((resolve, reject) => {
    setTimeout(resolve, 1, "second promise of 2 sec");
})
var p3 = new Promise((resolve, reject) => {
    setTimeout(resolve, 1, "rejected promise");
})
promiseSettle([p1, p2, p3])

有人可以帮忙吗?我不确定如何使用预期参数返回promise .

1 回答

  • 1

    这应该做到这一点 .

    function promiseSettle(inputList) {
      let promiseArray = inputList.map(
        input => {
          return new Promise((resolve, reject) => {
            input.then(
              value => {
                resolve({
                  isFulfilled: true,
                  isRejected: false,
                  value
                });
              },
              reason => {
                resolve({
                  isFulfilled: false,
                  isRejected: true,
                  reason
                });
              }
    
            );
          });
        }
      );
      
      return Promise.all(promiseArray);
    }
    
    // testing data
    var p1 = new Promise((resolve, reject) => {
      setTimeout(resolve, 1, "first promise of 1 sec");
    });
    var p2 = new Promise((resolve, reject) => {
      setTimeout(resolve, 2, "second promise of 2 sec");
    })
    var p3 = new Promise((resolve, reject) => {
      setTimeout(reject, 1, "rejected promise");
    })
    
    promiseSettle([p1, p2, p3]).then(
      promises => {
        console.log(promises);
      }
    );
    

相关问题