我试图处理一个项目数组,并且需要在块中使用异步函数。我需要在外循环中使用某种类型的Select ISNULL(ContactPerson,'n/a') from [dbo].[Suppliers]
函数,这样我就可以在循环中使用async
。
但我似乎无法让循环“等待”#39;继续之前。
下面的代码只打印出await
为msgs
,然后在循环中运行。
[]
我还尝试了// 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() ...
打印后,循环
答案 0 :(得分:1)
有两种方法可以解决这个问题。
for(let of items){...}
代替原因是map和forEach都调用了提供的回调,但不等待它被执行。