如何使用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();
});

这意味着在流完成之前,您的诺言将无法兑现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 Promise 共享异步调用的结果

来自分类Dev

如何处理对API的异步调用?

来自分类Dev

如何使用Ninject InRequestScope处理异步调用?

来自分类Dev

如何在事件处理程序中进行异步调用

来自分类Dev

如何处理对MySQL数据库的异步调用

来自分类Dev

如何处理来自useEffect的异步调用

来自分类Dev

如何在 React 中处理对 setState 的异步调用?

来自分类Dev

如何处理 lambda nodejs 中的异步调用

来自分类Dev

使用异步调用时异常处理的良好模式

来自分类Dev

Node.js 使用 Promise.all 返回异步调用?

来自分类Dev

如何使用 mockito 存根异步调用?

来自分类Dev

使用promise和defer在angularJS中进行同步和异步调用

来自分类Dev

如何在Redux中处理两个连续且相关的异步调用?

来自分类Dev

如何在React-Native应用程序中处理对Firebase的异步调用?

来自分类Dev

完成的Firebase功能中的异步调用会如何处理?

来自分类Dev

nodejs异步调用,如何处理一个URL上的多个请求

来自分类Dev

如何处理3个不同但同时进行的异步调用

来自分类Dev

如何在React-Native应用程序中处理对Firebase的异步调用?

来自分类Dev

如何处理来自带有回调的多个ajax异步调用的数据?

来自分类Dev

递归,Node js和异步调用

来自分类Dev

Node.js杀死异步调用

来自分类Dev

Node.js /使Redis异步调用

来自分类Dev

node.js redis 异步调用

来自分类Dev

如何异步调用WCF服务

来自分类Dev

如何从celery任务异步调用url

来自分类Dev

如何异步调用AWS Lambda函数

来自分类Dev

如何同步调用异步(等待)方法?

来自分类Dev

如何同步调用异步(等待)方法?

来自分类Dev

如何获得异步调用的结果?

Related 相关文章

热门标签

归档