1
私はアイテムの配列を処理しようとしており、ブロック内で非同期関数を使用する必要があります。外側のループをasync
という関数にする必要があるので、ループ内でawait
を使用することができます。mapとforEachで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
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);
});
});
FWIWで様々な構文を試してみました:
await item.laws.map(async function() ...
//and
item.laws.map(await async function() ...
を成功せず。
どちらの場合も、ループはの後に実行され、の後にdebug("msgs", msgs)
が印刷されます。
ありがとうございます!私は今、別のツールを使用して待つ:) – dcsan