我一直試圖圍繞我的問題,但沒有成功,因此我要求你的幫助。異步代碼執行說明
讓我們看看下面的例子:
const async = require('async')
var counter = 0
var test = cb => {
if (++counter < 3) {
setTimeout(() => {
async.each([0,1,2], (item, callback) => {
console.log(item)
console.log('counter inner ' + counter)
test(cb)
callback()
},() => {
cb()
})
})
} else {
console.log('counter ' + counter)
}
}
var prom = new Promise((res, rej) => test(() => res('done')))
prom.then(res => console.log(res))
輸出是:
0
counter inner 1
1
counter inner 2
counter 3
2
counter inner 3
counter 4
done
0
counter inner 4
counter 5
1
counter inner 5
counter 6
2
counter inner 6
counter 7
我不明白的是它是如何在第二0
後立即打印counter inner 4
。不應該打印counter inner 1
?一個承諾只能解決一次?第二次解決呼叫會發生什麼?謝謝。
可能的重複[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Liam
* [One單詞答案:異步性。](https://stackoverflow.com/a/23667087/542251)* – Liam