我应该在等待事件启动时明确创建一个承诺吗

Should I explicitly create a promise when waiting for an event to fire?

本文关键字:创建 一个承诺 在等待 事件 启动 我应该      更新时间:2023-09-26

我正在编写一个函数来获取rss提要并返回上次更新的日期:

var FeedParser = require('feedparser'),
Promise = require('bluebird'),
request = require('request');
function getDate() {
    var deferred = Promise.defer();
    var feed = new FeedParser();
    request('rss.xml');
    .on('response',function() {
        this.pipe(feed);
    });
    feed.on('meta',function() {
        deferred.resolve(this.meta.date);
    });
    return deferred.promise;
}

这是反模式吗?做这件事的正确方法是什么?

您可以稍微简化它。

var FeedParser = require('feedparser'),
Promise = require('bluebird'),
request = require('request');
function getDate() {
  return new Promise(function(resolve, reject){
    var feed = new FeedParser();
    request('rss.xml').on('error', reject).pipe(feed);
    feed.on('meta',function() {
      resolve(this.meta.date);
    }).on('error', reject);
  });
}