执行时的承诺范围不同

时间:2019-04-23 02:59:04

标签: javascript node.js asynchronous promise sequelize.js

我试图等待(Promise.all)一系列 Promise ,它们使用 Sequelize.js 来运行数据库查询,可以解决< / strong>来自then

我正在按以下方式兑现自己的诺言:

for (furnix in shorthandFurni) {

    furniData = shorthandFurni[furnix]
    furniSplit = furniData.split(":")    

    CompletedPromises.push(new Promise(resolve, reject) => {
        db.query("...").then(result => {
            . . .

            // depending on the for-loop
            resolve({
              otherdbdata: . . .,
              furniData: furniData,
              furniSplit: furniSplit
            })
        })
    })
}

然后返回(在for循环之后)。

return Promise.all(CompletionPromises)

这一切都很好,但是问题出在变量furniDatafurniSplit上,这是我所承诺的解决方案的一部分...现在,当此代码在我的服务器上执行时,对于所有承诺解决方案,返回的变量furniSplit相同。

基本上,我想知道如何将 furniSplit 作为变量带入resolve函数的范围,以便在for循环的每次迭代中提供唯一数据,而不是最后一个。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

乍看之下,这似乎是一个范围界定的问题。 试试

const furniSplit = furniData.split(":");

答案 1 :(得分:0)

您可以使用该函数获取相同的新值Data,但由于引用不同,它们并不相等。

   for (furnix in shorthandFurni) {

    const furniData = () => shorthandFurni[furnix]
    const furniSplit = () => furniData.split(":")    

    CompletedPromises.push(new Promise(resolve, reject) => {
        db.query("...").then(result => {
            . . .

            // depending on the for-loop
            resolve({
              otherdbdata: . . .,
              furniData: furniData(),
              furniSplit: furniSplit()
            })
        })
    })
}