首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现Javascript承诺的3个功能?

如何实现Javascript承诺的3个功能?
EN

Stack Overflow用户
提问于 2020-01-22 12:26:24
回答 5查看 218关注 0票数 0

我有三个函数,它们都需要特定的时间来执行,然后当它们全部完成时,我需要触发一个特定的函数。使用下面的代码,我能够通过一个函数获得预期的结果,但是对于多个函数,我没有做到这一点,请帮助我编辑这段代码,等待我的3函数,然后控制台它们返回的数据。

代码语言:javascript
复制
var promise = new Promise(function(resolve, reject) 
{
    setTimeout(function() 
    {
        resolve('hello world');
    }, 2000);
});

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

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-01-22 13:02:55

Promise.all()将接受一组承诺作为参数,并等待所有承诺完成。

代码语言:javascript
复制
    var promise1 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve('function 1 resolved');
    }, Math.random() * 10000);
});

var promise2 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve('function 2 resolved');
    }, Math.random() * 10000);
});

var promise3 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve('function 3 resolved');
    }, Math.random() * 10000);
});

Promise.all([promise1, promise2, promise3])
    .then(resArr => {
        console.log(resArr)
    })

通过使用附加到.catch()的promise.all(),可以捕获在任何承诺中发生的错误。

代码语言:javascript
复制
Promise.all([promise1, promise2, promise3])
    .then(resArr => {
        console.log(resArr)
    })
    .catch(error => console.log(error))
票数 0
EN

Stack Overflow用户

发布于 2020-01-22 12:34:49

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

代码语言:javascript
复制
Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});

对象/承诺/全部

所以对于你的案子:

代码语言:javascript
复制
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]);
  })

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

票数 3
EN

Stack Overflow用户

发布于 2020-01-22 12:28:05

您可以引用此代码,其中函数被调用3次,有两种方法可以这样做,您还可以看到不同的行为。

代码语言:javascript
复制
// Function which returns a promise and resolves in 2 seconds
    const promiseFunction = () => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('resolved');
        }, 2000);
      });
    };

    // Asynchronous function 1
    const asyncFunction1 = async() => {
        console.log(await promiseFunction());
        console.log(await promiseFunction());
        console.log(await promiseFunction());
    }

    // Asynchronous function 2
    const asyncFunction2 = async() => {
        let a = promiseFunction();
        let b = promiseFunction();
        let c = promiseFunction();

        console.log(await a);
        console.log(await b);
        console.log(await c);
    }   

看到之间的区别

asyncFunction1()asyncFunction2()调用

使用异步/等待是一种ES6方式,您也可以进行.then()链接

代码语言:javascript
复制
promiseFunction().then(() => {
//function body here
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59859756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档