Bri*_* P. 0 javascript promise
我试图在每个人的内部逐个履行承诺.
对不起,我知道这可能是一个简单的问题,但我发现很难找到如何解决这个问题的答案.
我希望console.log会像这样显示
test
a
test
b
test
c
Run Code Online (Sandbox Code Playgroud)
但是,它显示这样
test
test
test
a
b
c
Run Code Online (Sandbox Code Playgroud)
这是我的代码 https://jsfiddle.net/brianivander/b6csvrn9/1/
var array1 = ['a', 'b', 'c'];
array1.forEach(function(element) {
promise().then(() => {
console.log(element);
})
});
function promise() {
return new Promise((resolve, reject) => {
console.log('test');
resolve()
})
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
您不能使用forEach它(至少,不能访问外部变量) - 如果您想使用数组方法,请reduce改为使用,并且每次都将当前Promise作为累加器传递:
var array1 = ['a', 'b', 'c'];
array1.reduce((a, str) => (
a.then(promise)
.then(() => {
console.log(str);
})
), Promise.resolve());
function promise() {
return new Promise((resolve, reject) => {
console.log('test');
resolve()
})
}Run Code Online (Sandbox Code Playgroud)
或者,如果您想使代码更易于阅读,请await在for循环内部使用:
var array1 = ['a', 'b', 'c'];
(async () => {
for (const str of array1) {
await promise();
console.log(str);
}
})();
function promise() {
return new Promise((resolve, reject) => {
console.log('test');
resolve()
})
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |