【问题标题】:Resolving Muliple Promise Node-JS解决多个 Promise Node-JS
【发布时间】:2016-01-27 23:56:38
【问题描述】:

我有很多承诺。

var defered = q.defer();
// promises is a array which will have different promises
var promises = [];

q.all(promises).then(function(response){

// SUSSECCFULLY RESOLVED ALL PROMISE THEN EXECUTION COME HERE

}, function(error){

// IF ANY PROMISE FAILED THEN EXECUTION COME HERE

});

我想处理所有承诺,无论它们失败还是解决。

【问题讨论】:

  • 你的问题是什么?
  • 一些 Promises Fail 然后它会为所有的 Promise 调用 fail 函数。如果所有的承诺都通过了,那么它就会调用成功函数。如何处理一些失败的一些通过承诺。
  • 也许 .allSettled 方法对你有用。 github.com/kriskowal/q/wiki/API-Reference#promiseallsettled
  • 谢谢这就是我要找的..

标签: angularjs node.js promise q


【解决方案1】:

用例 1:

您希望处理要单独处理的错误并在所有未调用的情况下成功:

var myApp = angular.module('myApp', []);

function MyCtrl($scope, $q, $timeout) {
	function prOne(){
  	var d = $q.defer();
    setTimeout(function(){
    	d.reject();
		}, 100);
    return d.promise;
  }
	function prTwo(){
  	var d = $q.defer();
    setTimeout(function(){
    	d.resolve();
		}, 100);
    return d.promise;
  }
  $q.all([prOne().catch(function(){ console.log('fail for one'); return $q.reject() }), prTwo()]).then(function(){
  	console.log('success');
    return $q.resolve();
  }).catch(function(){
  	console.log('error');
  });;
}

myApp.controller('MyCtrl', MyCtrl);

用例 2:

您希望处理要单独处理的错误并在所有调用时成功:

var myApp = angular.module('myApp', []);

function MyCtrl($scope, $q, $timeout) {
	function prOne(){
  	var d = $q.defer();
    setTimeout(function(){
    	d.reject();
		}, 100);
    return d.promise;
  }
	function prTwo(){
  	var d = $q.defer();
    setTimeout(function(){
    	d.resolve();
		}, 100);
    return d.promise;
  }
  $q.all([prOne().catch(function(){ console.log('fail for one'); return $q.resolve() }), prTwo()]).then(function(){
  	console.log('success');
    return $q.resolve();
  }).catch(function(){
  	console.log('error');
  });;
}

myApp.controller('MyCtrl', MyCtrl);

【讨论】:

  • 感谢 Yerken 的宝贵时间。我的 promise 数组是动态的,一次可以有 15 个 promise。是否有任何通用解决方案。我的意思是它没有由 q 提供的 inbuild 方法......比如 q.all()。
  • 当然只是在返回给$q.all的promise内处理
猜你喜欢
  • 1970-01-01
  • 2022-06-22
  • 1970-01-01
  • 2018-01-24
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多