开发者问题收集

Promise 函数中的变量变为未定义

2018-02-08
493

我有一个全局范围内的数组 ( targets ),我将它的值传递给执行一些文本转换的外部函数 [第三方库, externalConverter ]。此数组的值被传递到 convert 函数,转换正常进行。

const targets = [‘box’, ’box1’, ’box2’, ’box3’]

for (var i = 0; i < targets.length; ++i) {
    console.log(targets[i]); // this is coming out fine
    externalConverter
        .convert(data.text, targets[I])
        .then(results => {
            data.convertedText.push({
                [targets[i]]: results[0]
            });

            //above convertedText array comes out as
            //{“undefined: ”, “nice converted text”}, ...
        })
}

在 Promise 的结果中,我尝试访问 targets 值,但在上面的函数中获取 undefined 值。我不确定为什么目标突然变成 undefined

有什么想法吗?

1个回答

在任何 then 回调执行之前, i 的值将已发展为其最终值(即 targets.length ),因此使用 i 作为索引的任何行为都将超出范围。

使用 let i 而不是 var i 来创建单独的 i 实例,这样就不会出现此问题。

trincot
2018-02-08