簡體   English   中英

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是否相同?

我知道通過測試我已經完成了但我找不到任何文檔/示例說明 promise.then 中的 singleObject 將與 promise 之前的 singleObject 相同。

promise.then中的singleObject是否總是和promise之前的singleObject在同一個scope中?

是的,兩個變量都包含對相同 object 的引用。它與Promise.then 就是箭頭function的閉合

res => { if (res === true) { finalArray.push(singleObject) } } 

閉包是將 function 捆綁在一起(封閉)並引用其周圍的 state(詞法環境)的組合。 換句話說,閉包使您可以從內部 function 訪問外部函數的 scope。在 JavaScript 中,每次創建 function 時都會創建閉包,創建時間為 function。

甚至全局 scope 也是閉包 scope 鏈的一部分:

每個閉包都有三個作用域:

  • 本地 Scope(自己的范圍)
  • 外部函數 Scope
  • 全球 Scope

不是 100% 確定,但我會說singleObject在前后確實是一樣的。 我相信它可能是對原始 object 的引用? 檢查的方法是修改arrayObject中的一個對象,然后打印arrayObjectfinalArray ,檢查您修改的 object 是否在兩者中都被修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM