Javascript Async/Await—在解析承诺之前执行代码
我有一个异步函数,它处理一个数组,并通过增加每个元素的时间间隔来调用另一个异步函数 我等待所有承诺得到解决,然后将结果数组保存在一个文件中。尽管由于某些原因,写入文件操作在承诺得到解决之前执行。 有人能告诉我我可能做错了什么吗 读取和写入文件函数通过node util转换为promise,getGuidesList返回一个promiseJavascript 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
(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
insidesetTimeout(async()=>{})
不是外部承诺链的一部分谢谢。我用下面的答案解决了我的问题。谢谢,这解决了问题。。。由于某种原因,结果数组是空的,但至少执行是正确的。啊,找到了。当然,我错过了返回声明:)