首页 > 解决方案 > Javascript:如何从 Promise for 循环中返回一个值?

问题描述

在这个例子中如何返回 sum 的值?

function slowFunction(par) {
      sum = 0
      for (let i = 0, p = Promise.resolve(); i < 5; i++) {
        p = p.then(_ => new Promise(resolve =>
          setTimeout(function () {
            sum += i ;
            console.log(i);
            resolve();
          }, Math.random() * 1000)
        ));
      }
    }

标签: javascriptpromisereturn

解决方案


我不确定您在寻找什么,但这将是包装承诺的正确方法:

function slowFunction(par) {
    return new Promise(resolve => {
        var sum = 0
        for (let i = 0; i < 5; i++) {
            setTimeout(function () {
                sum += i ;
                resolve(sum);
            }, Math.random() * 1000)
        }
    })   
}

async function main() {
    const i = await slowFunction()
    console.log(i) 
}

main()

不使用 asyc/await:

function slowFunction(par) {
    return new Promise(resolve => {
        var sum = 0
        for (let i = 0; i < 5; i++) {
            setTimeout(function () {
                sum += i ;
                resolve(sum);
            }, Math.random() * 1000)
        }
    })   
}

slowFunction().then(value => console.log(value))


推荐阅读