这段代码中,'Data fetched successfully!' 和 'Data processed successfully!' 几乎同时输出的原因是因为 setTimeout 函数是一个异步操作,在执行到 setTimeout 时会将其放入事件循环队列中,然后继续执行后面的代码。而不会等待 setTimeout 执行完毕再执行下面的代码。

要实现它们先后输出,可以使用 Promise 来包装 setTimeout,并在需要等待的地方使用 await 来等待 Promise 的返回结果。

下面是修改后的代码:

async function fetchData() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log('Data fetched successfully!');
            resolve();
        }, 2000);
    });
}
  
async function processData() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log('Data processed successfully!');
            resolve('Processed data');
        }, 2000);
    });
}

async function execute() {
    await fetchData();
    await processData();
}

execute().then(function() {
    console.log('Both functions executed successfully!');
});
  processData().then(function(processedResult) {
    console.log(processedResult);
  });

在上面的代码中,通过将 setTimeout 包装成 Promise,并在 setTimeout 内部使用 resolve 来传递结果,从而使得在 await fetchData() 和 await processData() 处等待 Promise 的返回结果,确保了它们先后输出。

Node.js 异步操作:使用 async/await 实现代码顺序执行

原文地址: https://www.cveoy.top/t/topic/qbIt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录