我试图了解如何在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));
};
答案 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));