Promise.all用法举例

1.并发执行

var p1 = Promise.resolve(1);
var p2 = Promise.resolve(2);
var p3 = Promise.resolve(3);

// 
Promise.all([p1, p2, p3]).then(function(results){
	console.log(results);
});

/**
 [ 1, 2, 3 ]
 */

2.并发执行,出错一个,将会触发catch

var p1 = Promise.resolve(1);
var p2 = Promise.reject(2); //失败的原因,catch将会捕获这个值
var p3 = Promise.resolve(3);

// 
Promise.all([p1, p2, p3]).then(function(results){
	console.log(results);
}).catch(function(e){
	console.log(JSON.stringify(e));
});

/**
 2
 */

3.可以看出只要有一个地址出错,那么所有的就都不会输出

var http = require("http");

// 
function getURL(url){
	return new Promise(function(resolve, reject){
		http.get(url, function(res){
			resolve(res);
		}).on("error", function(e){
			reject(e);
		});
	});
}

// 
var itbilu = getURL("http://itbilu.com"); 
var yijiebuyi = getURL("http://yijiebuyi111.com"); 

Promise.all([itbilu, yijiebuyi]).then(function(results){
	results.forEach(function(result){
		console.log(result.statusCode);
	});
}).catch(function(err){
	console.log(err);
});

/**
1)正常情况下输出:
301
200


2)故意拼错一个地址(itbilu拼错): 
var itbilu = getURL("http1://itbilu.com"); 
[Error: Protocol "http1:" not supported. Expected "http:".]


3.访问不存在的地址 
var yijiebuyi = getURL("http://yijiebuyi.com1"); 


{ [Error: getaddrinfo ENOTFOUND yijiebuyi.com1 yijiebuyi.com1:80]
  code: 'ENOTFOUND',
  errno: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'yijiebuyi.com1',
  host: 'yijiebuyi.com1',
  port: 80 }
 */

 

你可能感兴趣的:(node.js)