Javascript 承诺范围在执行时不同

Javascript 承诺范围在执行时不同,javascript,node.js,asynchronous,promise,sequelize.js,Javascript,Node.js,Asynchronous,Promise,Sequelize.js,我正在尝试等待(Promise.all)一系列Promises,这些Promises使用Sequelize.js运行数据库查询,它从解析,然后 我将履行我的承诺如下: for(速记furnix){ furniData=shorthandFurni[furnix] furniSplit=furniData.split(“:”) 完成承诺。推送(新承诺(解决、拒绝)=>{ db.query(“…”)。然后(结果=>{ . . . //取决于for循环 决心({ 其他数据库数据:。, furniDat

我正在尝试等待(
Promise.all
)一系列Promises,这些Promises使用Sequelize.js运行数据库查询,它
解析,然后

我将履行我的承诺如下:

for(速记furnix){
furniData=shorthandFurni[furnix]
furniSplit=furniData.split(“:”)
完成承诺。推送(新承诺(解决、拒绝)=>{
db.query(“…”)。然后(结果=>{
. . .
//取决于for循环
决心({
其他数据库数据:。,
furniData:furniData,
furniSplit:furniSplit
})
})
})
}
然后返回(在for循环之后)

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

基本上,我想知道如何将furniSplit作为一个变量引入resolve函数的范围,以便在for循环的每次迭代中都给出唯一的数据,而不是最后一次。
感谢您的帮助。

乍一看,这似乎是一个范围问题。 试一试


乍一看,这似乎是一个范围问题。 试一试


您可以使用该函数获取新的相同值数据,但它们不相等,因为引用不同

   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()
            })
        })
    })
}

您可以使用该函数获取新的相同值数据,但它们不相等,因为引用不同

   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()
            })
        })
    })
}

不要使用全局变量。。。使用
让furniData=
让furniSplit=
一切都会好的不要使用全局变量。。。使用
让furnita=
让furniSplit=
一切都会好起来的。我现在在我的问题中添加了一些内容,我尝试了你的解决方案,得到了与以前相同的结果。@JackHales你为
furnita
furniSplit
都添加了
常量了吗?噢!现在工作!公平地说,我不确定为什么将其设置为常量会使其工作,在我看来,这是一个在变量设置后动态访问的范围。你能给我解释一下吗?谢谢。它被调用,导致变量被添加到函数外的作用域并被覆盖。我现在在我的问题中又添加了一些变量,我尝试了你的解决方案,得到了与以前相同的结果。@JackHales你是否为
furnita
furniSplit
都添加了
const
?噢!现在工作!公平地说,我不确定为什么将其设置为常量会使其工作,在我看来,这是一个在变量设置后动态访问的范围。你能给我解释一下吗?谢谢。它被调用,结果变量被添加到函数外部的作用域中,并被覆盖
   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()
            })
        })
    })
}