for循环值在Promise.then()里面
For loop value in Promise.then() inside
我对 node.js 中的 for 循环内的 promise.then() 有疑问。
对于这样的代码:
const arrayObject = [
{
id: 1234,
toto: 'abc'
},
{
id: 5678,
toto: 'def'
},
{
id: 910,
toto: 'ghi'
},
]
const finalArray = []
let promiseArray = []
for (let singleObject of arrayObject) {
promiseArray.push(
Promise.function(...).then(res => {
if (res === true) {
finalArray.push(singleObject)
}
})
)
}
await Promise.all(promiseArray)
如果promise之前的singleObject是'id: 1234',那么promise中的singleObject是否一样?
我知道通过测试我已经做到了,但是我找不到任何 documentation/example 说明 promise.then 中的 singleObject 将与 promise 之前的 singleObject 相同。
promise.then 中的 singleObject 是否始终与 promise 之前的 singleObject 在同一范围内?
不是 100% 确定,但我会说 singleObject
前后确实是一样的。我相信它可能是对原始对象的引用?
检查的方法是修改 arrayObject
中的一个对象,然后打印 arrayObject
和 finalArray
,检查你修改的对象是否在两个中都被修改。
是的,两个变量都包含对同一对象的引用。与Promise.then
无关。就是箭头函数的closure
res => { if (res === true) { finalArray.push(singleObject) } }
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.
甚至全局范围也是 closure scope chain:
的一部分
Every closure has three scopes:
- Local Scope (Own scope)
- Outer Functions Scope
- Global Scope
我对 node.js 中的 for 循环内的 promise.then() 有疑问。
对于这样的代码:
const arrayObject = [
{
id: 1234,
toto: 'abc'
},
{
id: 5678,
toto: 'def'
},
{
id: 910,
toto: 'ghi'
},
]
const finalArray = []
let promiseArray = []
for (let singleObject of arrayObject) {
promiseArray.push(
Promise.function(...).then(res => {
if (res === true) {
finalArray.push(singleObject)
}
})
)
}
await Promise.all(promiseArray)
如果promise之前的singleObject是'id: 1234',那么promise中的singleObject是否一样?
我知道通过测试我已经做到了,但是我找不到任何 documentation/example 说明 promise.then 中的 singleObject 将与 promise 之前的 singleObject 相同。
promise.then 中的 singleObject 是否始终与 promise 之前的 singleObject 在同一范围内?
不是 100% 确定,但我会说 singleObject
前后确实是一样的。我相信它可能是对原始对象的引用?
检查的方法是修改 arrayObject
中的一个对象,然后打印 arrayObject
和 finalArray
,检查你修改的对象是否在两个中都被修改。
是的,两个变量都包含对同一对象的引用。与Promise.then
无关。就是箭头函数的closure
res => { if (res === true) { finalArray.push(singleObject) } }
A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function's scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.
甚至全局范围也是 closure scope chain:
的一部分Every closure has three scopes:
- Local Scope (Own scope)
- Outer Functions Scope
- Global Scope