我尝试转换数组wordList
的所有元素,并将它们推送到一个新列表translatedWordList,
中,但是由于translate()
是异步的,所以当我回调或返回它时,新列表为空
function translateWordList(wordList, callback) {
var translatedWordList = [];
wordList.forEach((word) => {
translate(word, (translation) => {
translatedWordList.push(translation);
});
});
callback(translatedWordList);
}
我尝试通过使用while循环延迟回调来解决这个问题,该循环一直运行到translatedWordList
和wordList
的长度匹配为止,但是translate函数没有记录任何内容
function translateWordList(wordList, callback) {
var translatedWordList = [];
wordList.forEach((word) => {
translate(word, (translation) => {
translatedWordList.push(translation);
console.log(translation)
counter++;
});
});
while (translateWordList.length < wordList.length) {}
callback(translatedWordList);
}
2条答案
按热度按时间ztigrdn81#
不使用Array#forEach,而使用普通的for循环并使函数异步,这样就可以使用await关键字。
如果您的translate函数不返回承诺,而只使用回调,那么您可以承诺该函数。
然后将第一个示例中的
translate(word)
调用替换为translatePromise(word)
。然而,如果你不想使用async/await,你可以这样做。
lkaoscv72#