首页 > 解决方案 > 如何为 3 个函数实现 Javascript 承诺?

问题描述

我有 3 个函数都需要特定的时间来执行,然后当它们都完成后,我需要触发某个函数。使用以下代码,我可以使用单个函数获得预期结果,但使用多个函数我无法做到这一点,请帮助我编辑此代码以等待我的3 个函数,然后控制台它们返回的数据。

var promise = new Promise(function(resolve, reject) 
{
    setTimeout(function() 
    {
        resolve('hello world');
    }, 2000);
});

promise.then(function(data) 
{
    console.log(data);
});

标签: javascriptes6-promise

解决方案


Javascript 有一个内置的方法,它等待你承诺解决的所有问题。

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

所以对于你的情况:

const promiseFunction = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
};

const promise1 = promiseFunction();
const promise2 = promiseFunction();
const promise3 = promiseFunction();

Promise.all([promise1, promise2, promise3])
  .then((result) => {
    console.log(result[0]);
    console.log(result[1]);
    console.log(result[2]);
  })

结果是从每个承诺返回的值数组。


推荐阅读