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]
将得到解决。对于具有相同索引的所有迭代,最后一个,这不是问题。这是预期的行为。问题是,该用户表现出意外的行为—他的输出来自promiseone,one
,而不是two,two