我仍然在学习承诺并且碰到了这个对我来说毫无意义的事情:
我有以下的viewmodel。请注意以下部分:
var getpageinfos...
以下:
Q.resolve(getpageinfos)...
getpageinfos方法按预期运行。
然而,如果我拿出Q.resolve ......它仍然会运行!这不是预期的。如果Q.resolve没有这样做,getpageinfos是如何执行的?这对我来说毫无意义。
如何执行?
define(['services/unitofwork', 'services/errorhandler', 'plugins/router'], function (unitofwork, errorhandler, router) {
var unitofwork = unitofwork.create();
var viewmodel = {
convertRouteToHash: router.convertRouteToHash,
pageInfo: ko.observable(),
activate: function () {
ga('send', 'pageview', { 'page': window.location.href, 'title': document.title });
},
attached: function () {
var self = this;
var getpageinfos = unitofwork.pageinfos.all()
.then(function (pageinfos) {
self.pageInfo(pageinfos[0]);
});
return Q.resolve(getpageinfos).fail(self.handleError);
},
};
errorhandler.includeIn(viewmodel);
return viewmodel;
});
答案 0 :(得分:2)
Q.resolve
所做的是获取价值或承诺并为其返回承诺。这很有用,因为有时您希望将值包装在promise中(例如,简称Q.resolve(5)
或Q(5)
)。将承诺从其他库转换为Q承诺也很有用。
如果你将Q保证传递给Q.resolve
,它就不会对它做任何事情而只返回它。它确实:
if (value instanceof Promise) {
return value;
}
请注意,承诺是已启动的操作,您无法“运行”承诺只能听取其完成或错误。