簡體   English   中英

如何使用JS Promise處理異步調用?

[英]How to handle asynchronous calls using a JS Promise?

我有一個返回承諾的函數。 在Promise的第一步中,我獲取一些XML並將其寫入名為feed.xml的文件中。 然后,在下一個塊中,我將該XML轉換為JSON。 這里的問題是我的函數試圖在將文件完成寫入系統之前將xml文件轉換為JSON。 如何使第二個塊在第一個塊上等待?

這是我的功能:

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();
});

這意味着在流完成之前,您的諾言不會得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM