在没有 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 只监听它的完成或错误。