Javascript 信誓旦旦

Javascript 信誓旦旦,javascript,node.js,Javascript,Node.js,鉴于以下代码: var arr = ['one', 'two'] for (index in arr) { console.log('outside promise:', arr[index]) myPromise().then(function(response) { console.log('inside promise:', arr[index]) }) } 我的输出: // outside promise: one // outside promise: two

鉴于以下代码:

var arr = ['one', 'two']

for (index in arr) {
  console.log('outside promise:', arr[index])

  myPromise().then(function(response) {
    console.log('inside promise:', arr[index])
  })
}
我的输出:

// outside promise: one
// outside promise: two
// inside promise: one
// inside promise: one

为什么promise中的hack控制台输出不循环槽值?

正如注释中所述,正确的输出将是:

// outside promise: one
// outside promise: two
// inside promise: TWO
// inside promise: TWO
因为承诺将在索引已经是
1
而不是0时得到解决。如果您在控制台中得到不同的结果,则可能是并发问题。尝试将结果添加到数组中,然后将其输出

const arr = ['one', 'two'];
let results = [];

for (index in arr) {
  results.push(`outside promise: ${arr[index]}`)

  myPromise().then(function(response) {
      results.push(`inside promise: ${arr[index]}`)
  })
}

console.dir(results);

你能说得更清楚一点吗,我真的不明白你说的问题是什么?我的承诺定义在哪里?预期结果是什么?在循环中尝试var x=arr[index];然后console.log(x)在promise中我对您声称的输出感到惊讶-它应该输出
内部承诺:2
两次而不是
内部承诺:1
两次-问题是与异步性有关-当这两个
都被调用时,
s的索引是1-因此arr[1]将logged@PenAndPapers-这将产生零差异无论是记录值还是将其推送到数组(在计时方面),都没有区别。问题是相同的。@Thomas哪个问题?在循环完成迭代后,闭包中的
数组[index]
将得到解决。对于具有相同索引的所有迭代,最后一个,这不是问题。这是预期的行为。问题是,该用户表现出意外的行为—他的输出来自promise
one,one
,而不是
two,two