通过$ q.all获得诺言的返回值

时间:2018-12-13 13:03:23

标签: angularjs angular-promise

我想使用$q.all()方法获得promise的返回值。 这是我到目前为止尝试过的。

var promise1 = function(time){
            var defered = $q.defer();
            var promise = defered.promise;

            defered.resolve(time);
            console.log(time);
            return promise;
          };

 var promise2 = function(time){
            var defered = $q.defer();
            var promise = defered.promise;

            defered.resolve(time);
            console.log(time);
            return promise;
          };

我试图同时从timepromise1返回promise2的方式

$q.all([promise1,promise2]).then(function(){
              console.log("Worked");
              console.log(promise1 + " , " + promise2);
              //ref.close();
            });

但是控制台会像这样打印promise的全部功能。

function (time){
            var defered = $q.defer();
            var promise = defered.promise;

            defered.resolve(time);
            console.log(time);
            return promise;
          },function (time){
            var defered = $q.defer();
            var promise = defered.promise;

            defered.resolve(time);
            console.log(time);
            return promise;
          }

1 个答案:

答案 0 :(得分:1)

  

这是因为您没有在两个函数(promise1和promise2)上调用和传递时间值。

     

如果您将以这种方式实现 [promise1,promise2] ,则$ q.all仍将运行它,但将返回一个函数而不是一个值,因为您有一个带有参数{{ 1}}尚未填写。

兑现您的承诺的价值,例如: 500(500毫秒)。有了它,您的 $ q.all

就可以使用了
function (time) {}
  

因为仅传递 [promise1,promise2] 就像传递一个原始函数,该函数等待调用者在另一个函数中内部调用它们,例如promise1(),promise2()

示例场景:

$q.all([promise1(500),promise2(500)]).then(function(data) {
   console.log("Worked");
   console.log(data);
});