我应该在等待事件发生时明确地创build一个承诺吗?

我正在写一个函数来获取rss订阅并返回上次更新的date:

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