Javascript Async/Await—在解析承诺之前执行代码

Javascript Async/Await—在解析承诺之前执行代码,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,我有一个异步函数,它处理一个数组,并通过增加每个元素的时间间隔来调用另一个异步函数 我等待所有承诺得到解决,然后将结果数组保存在一个文件中。尽管由于某些原因,写入文件操作在承诺得到解决之前执行。 有人能告诉我我可能做错了什么吗 读取和写入文件函数通过node util转换为promise,getGuidesList返回一个promise (async () => { try { const file = await readFilePromise('./kommuner.js

我有一个异步函数,它处理一个数组,并通过增加每个元素的时间间隔来调用另一个异步函数

我等待所有承诺得到解决,然后将结果数组保存在一个文件中。尽管由于某些原因,写入文件操作在承诺得到解决之前执行。 有人能告诉我我可能做错了什么吗

读取和写入文件函数通过node util转换为promise,getGuidesList返回一个promise

(async () => {

  try {
    const file = await readFilePromise('./kommuner.json');
    const municipalities = JSON.parse(file).municipalities;
    console.log(municipalities);
    const municipalities_new = await Promise.all(municipalities.map(async (municipality, index) => {
      setTimeout(async () => {
        let guides = await getGuidesList(municipality.municipality_id);
        // const guides = [];
        if (typeof guides === 'string') {
          guides = [];
        }
        console.log(`Number of guides for ${municipality.municipality_name}: ${guides.length}`);
        Reflect.set(municipality, 'guides_number', guides.length);
        Reflect.set(municipality, 'guides', guides);
        console.log(municipality)
      }, index * 5000);
    }))
    console.log(municipalities_new);
    await writeFilePromise('./kommuner_guide.json', JSON.stringify({
      "municipalities": municipalities_new
    }));
  } catch (err) {
    console.log(err);
  }
})();

这里的问题是这一行:

 setTimeout(async () => {
您可以执行setTimeout调用。这将安排稍后调用回调。但你不必等待回调的发生。而是使用某些预期版本的setTimeout:

  const timer = ms => new Promise(res => setTimeout(res, ms));
那你可以

  await timer(2000);
  await /*other stuff*/;

我以前看过这个代码,就像一小时前。。。它是通过一个有用答案的链接关闭的……问题是,无法等待setTimeout,因此setTimeout中的代码不会等待
wait
inside
setTimeout(async()=>{})
不是外部承诺链的一部分谢谢。我用下面的答案解决了我的问题。谢谢,这解决了问题。。。由于某种原因,结果数组是空的,但至少执行是正确的。啊,找到了。当然,我错过了返回声明:)