【问题标题】:JS, how to get promises in loopsJS,如何在循环中获得承诺
【发布时间】:2021-08-12 09:14:52
【问题描述】:

我最近才开始使用 js,但仍然无法弄清楚循环中的 Promise。 我正在使用 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 } ]

【问题讨论】:

标签: javascript node.js discord.js repl.it


【解决方案1】:

您可以尝试将 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

【讨论】:

  • 如果你不混合await.then(),这段代码会更好。只需使用await。此外,由于.then() 的异步性质,i 的值将是错误的,因此它不会如图所示工作。循环变量使用let 而不是var
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 2023-03-20
  • 2017-06-22
  • 2018-10-13
  • 1970-01-01
  • 2020-05-15
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多