如果没有Q.resolve,如何解决承诺

时间:2015-06-16 15:00:32

标签: javascript promise q

我仍然在学习承诺并且碰到了这个对我来说毫无意义的事情:

我有以下的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;
});

1 个答案:

答案 0 :(得分:2)

Q.resolve所做的是获取价值或承诺并为其返回承诺。这很有用,因为有时您希望将值包装在promise中(例如,简称Q.resolve(5)Q(5))。将承诺从其他库转换为Q承诺也很有用。

如果你将Q保证传递给Q.resolve,它就不会对它做任何事情而只返回它。它确实:

if (value instanceof Promise) {
    return value;
}

请注意,承诺是已启动的操作,您无法“运行”承诺只能听取其完成或错误。