JS,如何在循环中获得承诺
JS, how to get promises in loops
我最近才开始使用 js,但仍然无法理解循环中的承诺。
我正在使用 repl.it 数据库。假设我有一个包含键的数组,我想查询数组的每个元素以将值放入另一个数组中。
类似这样的东西(当然,这段代码是行不通的):
var arr = ['key1','key2','key3'];
var newarr = ['name1','name2','name3'];
for (var i = 0; i < arr.length; i++) {
db.get(arr[i]).then(val=> {
newarr[i] = { name: newarr[i], value: val };
});
};
console.log(newarr) // [ { name: name1, value: value1 },{ name: name2, value: value2 },{ name: name3, value: value3 } ]
您可以尝试将 for 循环包装在异步函数中并在 db.get
之前添加 await
像这样:
const getData = async () => {
try {
for (var i = 0; i < arr.length; i++) {
await db.get(arr[i]).then(val => {
newarr[i] = { name: newarr[i], value: val };
});
};
} catch (err) {
console.log('err:', err) //handle errors
}
console.log(newarr)
}
getData() // run it
我最近才开始使用 js,但仍然无法理解循环中的承诺。 我正在使用 repl.it 数据库。假设我有一个包含键的数组,我想查询数组的每个元素以将值放入另一个数组中。
类似这样的东西(当然,这段代码是行不通的):
var arr = ['key1','key2','key3'];
var newarr = ['name1','name2','name3'];
for (var i = 0; i < arr.length; i++) {
db.get(arr[i]).then(val=> {
newarr[i] = { name: newarr[i], value: val };
});
};
console.log(newarr) // [ { name: name1, value: value1 },{ name: name2, value: value2 },{ name: name3, value: value3 } ]
您可以尝试将 for 循环包装在异步函数中并在 db.get
之前添加 await像这样:
const getData = async () => {
try {
for (var i = 0; i < arr.length; i++) {
await db.get(arr[i]).then(val => {
newarr[i] = { name: newarr[i], value: val };
});
};
} catch (err) {
console.log('err:', err) //handle errors
}
console.log(newarr)
}
getData() // run it