gpt4 book ai didi

javascript - 如何使用 JS Promise 处理异步调用?

转载 作者:行者123 更新时间:2023-11-28 18:16:56 25 4
gpt4 key购买 nike

我有一个返回 promise 的函数。在 Promise 的第一个 block 中,我获取一些 XML 并将其写入名为 feed.xml 的文件中。然后,在下一个 block 中,我将该 XML 转换为 JSON。这里的问题是,我的函数在文件完成写入系统之前尝试将 xml 文件转换为 JSON。如何让第二个 block 等待第一个 block ?

这是我的功能:

var out = fs.createWriteStream('./feed.xml');

var fetchJSON = () => {
return new Promise((resolve, reject) => {

var feedURL = 'http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l';
request(feedURL).pipe(zlib.createGunzip()).pipe(out);
resolve();

}).then(() => {

fs.readFile('feed.xml', function(err, data) {
parser.parseString(data, function(err, result) {
console.log(result);
});
});

});
};

fetchJSON();

最佳答案

您在请求完成之前就已解决。

request(feedURL).pipe(zlib.createGunzip()).pipe(out);
resolve();

您应该在流完成后立即解决,而不是在创建流后立即解决。您可以监听流 finish 事件 https://nodejs.org/api/stream.html#stream_event_finish

var stream = request(feedURL).pipe(zlib.createGunzip()).pipe(out);

stream.on('finish', function() {
resolve();
});

这意味着在流完成之前您的 promise 不会得到解决。

关于javascript - 如何使用 JS Promise 处理异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com