Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我是否应该在等待事件触发时明确创建承诺?_Javascript_Node.js_Rss_Promise_Bluebird - Fatal编程技术网

Javascript 我是否应该在等待事件触发时明确创建承诺?

Javascript 我是否应该在等待事件触发时明确创建承诺?,javascript,node.js,rss,promise,bluebird,Javascript,Node.js,Rss,Promise,Bluebird,我正在编写一个函数来获取rss提要并返回上次更新的日期: var FeedParser = require('feedparser'), Promise = require('bluebird'), request = require('request'); function getDate() { var deferred = Promise.defer(); var feed = new FeedParser(); request('rss.xml'); .

我正在编写一个函数来获取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);
  });
}

您可能应该将
var feed=new FeedParser()
在Promise回调中,因此任何可能抛出的异常都会变成Promise拒绝。