是否可以从promise notify回调中返回一个值?

时间:2014-12-18 12:59:05

标签: angularjs

是否可以从promise notify回调中返回任何内容?

在以下代码中,ServiceB.Start返回延迟保证,其中延迟是在ServiceB上定义的:

ServiceB.Start(action).then(
         function() {console.log("Success");},
         function() {console.log("Failed");},
         function (notifyObject) {
             var deferred = $q.defer();
             //do something time consuming
             $timeout(function() {
                 if (notifyObject.success) {
                     deferred.resolve({ message: "This is great!" });
                 } else {
                     deferred.reject({ message: "Really bad" });
                 }
             }, 5000);
             console.log(notifyObject.message);
             return deferred.promise;
         }
);


var notifyReturnValue = ServiceB.deferred.notify(notifyObject);
notifyReturnValue.then(
           function() {
             //do something else
             ServiceB.deferred.resolve(data);
           }
        );
    }

notifyReturnValue似乎未定义。有没有办法从deferred.notify()返回一些内容?

1 个答案:

答案 0 :(得分:1)

是的,您可以从notify回调中返回一个值。它类似于从成功/错误回调中返回值。 返回的值会传递到下一个notify回调线。但是,正如the documentation所述,您无法影响notify回调的解析/拒绝。这是有道理的,因为notify可能被多次调用,而承诺可能只被解决/拒绝一次。

当您致电then时,您会收到一个新的Promise。这是因为它是链接异步操作的一种方式。当不仅原始操作,而且传递到then(也可以是异步)的回调被解析时,新的承诺得到解决。

See this demo传递通知值(打开控制台)。