在循环中解决承诺

时间:2017-02-09 13:59:44

标签: typescript promise

有人可以帮助我理解为什么在循环中解析Promise只有在我访问循环变量时才有效吗?例如,这会记录5次:

for (let i = 0; i < 5; i++) {
    this.getData()
        .then(() => console.log("gotData " + i));
}

但这只记录一次:

for (let i = 0; i < 5; i++) {
    this.getData()
        .then(() => console.log("gotData"));
}

当getData()定义为:

private getData(): Promise<void> {
    return Promise.resolve();
}

在循环中处理promises的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

Matthias已经说过,浏览器的崩溃控制台输出是相同的,并显示计数指示器。代码表现完全相同。无论如何:

如果您想要按顺序解决Promise,您必须执行以下操作:

&#13;
&#13;
[1,2,3,4,5].reduce(
  (acc, i) => {
    acc.then(() => console.log(i));
    return acc;
  }, 
  Promise.resolve()
);
&#13;
&#13;
&#13;

如果排序无关紧要,您可以使用Promise.all。如果您想了解有关该主题的更多信息,请搜索StackOverflow。有很多;)