Promise的用法

1.Promise.all 的用法;

同时开始执行,而且每个promise的结果(resolve或reject时传递的参数值),和传递给 Promise.all 的promise数组的顺序是一致的。

var promise = Promise.resolve(3);

var promise2 = 42;

var promise3 = 'foo';

 

Promise.all([promise,promise2,promise3]).then(function(data){

 console.log(data);

});

 

打印结果:[ 3, 42, 'foo' ]

function timerPromisefy(delay) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(delay);
}, delay);
});
}
var startDate = Date.now();
// 所有promise变为resolve后程序退出
Promise.all([
timerPromisefy(1),
timerPromisefy(32),
timerPromisefy(64),
timerPromisefy(128)
]).then(function (values) {
console.log(Date.now() - startDate + 'ms');
// 約128ms
console.log(values); // [1,32,64,128]
});

 

2.简单的Promise数据传递:两种写法

new Promise(function(resolve){

resolve('222222');

 

}).then(function(data){

 console.log('promise传过来的data: '+data)

 

})

Promise.resolve(42).then(function(value){
console.log(value);
});

3.Promise捕获异常问题;


new Promise(function(resolve,reject){
user.save(function(err,data){
if(err){
reject(err); //必须使用reject传出err,否则catch捕获不到
}

resolve(data);
})
}).then( function(data){
console.log(data)

}).catch( function(err){

console.error('异常:'+err);

})

4.return和reject相似

function A(){

console.log('任务A');

}

function B(){

console.log('任务B')

}

function C(){

console.log('任务C');

}

 

function D(){

return '这是D的数据返回';

}

var promise = Promise.resolve();

promise.then(A).then(B).then(C).then(D).then(function(data){

console.log(data);

})

 

 

 

// 2: 对 `then` 进行 promise chain 方式进行调用

var bPromise = new Promise(function (resolve) {

    resolve(100);

});

bPromise.then(function (value) {

    return value * 2;

}).then(function (value) {

    return value * 2;

}).then(function (value) {

    console.log("2: " + value); // => 100 * 2 * 2

});

 

function anAsyncCall() {

    var promise = Promise.resolve();

    return promise.then(function() {

    // 任意处理

    return newVar;

}); }

 

更加详细Promise讲解,请参考:http://liubin.org/promises-book/#how-to-write-promise

原文地址:https://www.cnblogs.com/qiyc/p/8629598.html