在没有 Q.resolve 的情况下如何解决承诺
How is promise getting resolved without Q.resolve
我仍在学习 promises 并且 运行 对我来说毫无意义:
我有以下视图模型。注意部分:
var getpageinfos...
及以下:
Q.resolve(getpageinfos)...
getpageinfos 方法运行符合预期。
但是,如果我取出 Q.resolve... 它仍然是 运行s!这不是预期的。如果 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;
});
Q.resolve
所做的是获取一个值或一个承诺,并 return 为它提供一个承诺。这很有用,因为有时你想在承诺中包装一个值(例如 Q.resolve(5)
或 Q(5)
简称)。将其他库的承诺转换为 Q 承诺也很有用。
如果您将 Q promise 传递给 Q.resolve
,它不会对其执行任何操作,只是 returns 它。它确实:
if (value instanceof Promise) {
return value;
}
请注意,promise 是一个已经开始的操作,你不能"run"promise 只监听它的完成或错误。
我仍在学习 promises 并且 运行 对我来说毫无意义:
我有以下视图模型。注意部分:
var getpageinfos...
及以下:
Q.resolve(getpageinfos)...
getpageinfos 方法运行符合预期。
但是,如果我取出 Q.resolve... 它仍然是 运行s!这不是预期的。如果 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;
});
Q.resolve
所做的是获取一个值或一个承诺,并 return 为它提供一个承诺。这很有用,因为有时你想在承诺中包装一个值(例如 Q.resolve(5)
或 Q(5)
简称)。将其他库的承诺转换为 Q 承诺也很有用。
如果您将 Q promise 传递给 Q.resolve
,它不会对其执行任何操作,只是 returns 它。它确实:
if (value instanceof Promise) {
return value;
}
请注意,promise 是一个已经开始的操作,你不能"run"promise 只监听它的完成或错误。