将值从'this'传递到'then'函数的正确方法

时间:2015-11-04 17:23:28

标签: javascript node.js promise

我试图了解如何在JS中正确使用Promises,我偶然发现了以下问题。

如何正确/有效/以最佳方式将值从then变量传递给Promise的this函数?

我正在使用Node.js,MongoDB和Mongoose开发后端,并使用Calendar模型,我使用方法getFilteredIcal进行扩展。现在我将this存储到临时变量calendar中,因此可以通过then函数的闭包来访问它,但我不喜欢这种方法,并且认为它是错误的。 请参阅我附带的代码中的问题。

var Calendar = new mongoose.Schema({
   url: String,
   userId: mongoose.Schema.Types.ObjectId
});

Calendar.method.getFilteredIcal = function (respond) {
   var fetch = require('node-fetch');
   var icalCore = require('../tools/icalCore');
   var calendar = this; // <-- I don't like this
   fetch.Promise = require('bluebird');

   fetch(calendar.url)
    .then(icalCore.parseIcal)
    .then(parsedIcal => { return icalCore.filterIcal(parsedIcal, calendar._id) }) // <-- I need Calendar ID here 
    .then(icalCore.icalToString)
    .done(icalString => respond.text(icalString));
};

1 个答案:

答案 0 :(得分:3)

鉴于您已经在使用箭头函数,因此绝对不需要关闭此calendar变量 - 箭头函数确实会在词汇上解析它们的this值。

fetch(calendar.url)
.then(icalCore.parseIcal)
.then(parsedIcal => icalCore.filterIcal(parsedIcal, this._id))
//                                                  ^^^^
.then(icalCore.icalToString)
.done(icalString => respond.text(icalString));