Javascript: как вернуть значение из цикла Promise for? - PullRequest
0 голосов
/ 21 мая 2019

Как мне вернуть значение суммы в этом примере?

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)
        ));
      }
    }

1 Ответ

0 голосов
/ 21 мая 2019

Я не уверен, что вы ищете, но это был бы правильный способ обернуть обещание:

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))
...