我如何使用await with map和forEach?

时间:2016-08-14 05:54:18

标签: dictionary asynchronous typescript async-await

我试图处理一个项目数组,并且需要在块中使用异步函数。我需要在外循环中使用某种类型的Select ISNULL(ContactPerson,'n/a') from [dbo].[Suppliers] 函数,这样我就可以在循环中使用async

但我似乎无法让循环“等待”#39;继续之前。 下面的代码只打印出awaitmsgs,然后在循环中运行。

[]

我还尝试了// with a foreach let msgs = []; items.forEach(function(item, index) { item.laws.forEach(async function(law) { let orig = await Laws.coll.findOne({url: law.cname}); let title = Laws.title(orig); let msg = `<${law.cname}|${title}>`; msgs.push(msg); debug("title", title, msg); }); }); debug("msgs", msgs); // => shows []

的各种语法
map

FWIW我试过了:

  items.map(await async function(item) {
    item.laws.map(await async function(law) {
      let orig = await Laws.coll.findOne({url: law.cname});
      let title = Laws.title(orig);
      let msg = `<${law.cname}|${title}>`;
      msgs.push(msg);
      debug("title", title, msg);
    });
  });

没有成功。

在两种情况下, await item.laws.map(async function() ... //and item.laws.map(await async function() ... 打印后,循环

1 个答案:

答案 0 :(得分:1)

有两种方法可以解决这个问题。

  1. 使用for(let of items){...}代替
  2. Javascript Promises - &gt;中所述制作承诺序列。创建序列
  3. 原因是map和forEach都调用了提供的回调,但不等待它被执行。