我正在尝试用JavaScript学习承诺。一件令我困惑的事。那篇文章是范围界定的。为了了解承诺,我正在构建一个小应用程序。该应用程序具有视图,后面的一些代码和视图模型。我的代码背后是这样的:
codeBehind.js
var viewModel = new (require('./viewModel'))();
exports.viewLoaded = function(args) {
viewModel.load()
.then(function() {
console.log('promise fulfilled.');
console.log('Title: ' + viewModel.title);
})
;
};
如上面的代码段所示,引用了一个名为viewModel.js的文件。那个文件看起来像这样:
viewModel.js
function ViewModel() {
this.isLoading = false;
this.title = '[TODO]';
}
ViewModel.prototype = {};
ViewModel.prototype.load = function() {
console.log('loading...');
return new Promise(function (resolve, reject) {
try {
console.log('processing the promise.');
this.isLoading = true;
this.title = 'LOADED';
resolve();
}
catch (ex) {
reject(ex);
}
});
};
module.exports = ViewModel;
执行codeBehind.js viewLoaded函数时,我在控制台窗口中看到以下内容:
loading...
processing the promise.
promise fulfilled.
Title: [TODO]
我很困惑。我期待它说" Title:LOADED"。我觉得有些事我对承诺有误解。我究竟做错了什么?为什么不说"标题:加载"。