Promise承诺是一个对象。
对承诺对象上最常用方法是 then,
该方法接受三个参数:
一个是在承诺成功完成后调用的函数,
一个是在承诺完成但出错后调用的函数,
一个是提供进度信息的函数。
在 Windows 运行时和 Windows JavaScript 库中,你还可以使用 done 函数,该函数接受相同的参数。
区别在于,如果处理时出错,
then 函数会在错误状态下返回一个承诺,但不引发异常,
而 done 方法会在未提供错误函数的情况下引发异常。
总结:
正常Promise:调用then的onComplete即then的第一个函数参数。
异常Promise:调用then的onError即then的第二个函数参数。
对于promise可以使用.then().then().then()...执行链,它们顺序执行,没有异常的情况下,依次执行then的第一个函数参数即onComplete函数。
如果有一个链发生异常,则返回一个异常的Promise往下传递,直到遇到有onError函数参数的then后,则将异常信息传递给onError处理,
然后返回一个正常的Promise,直到执行链执行完毕。
在异常发生到异常被处理期间,Promise不会调用onComplete函数参数的,直到处理了异常后才会正常调用。
-----------------
Promise:
1.延迟执行某个任务
WinJS.Promise.timeout(5000).
then(function () {
that.output("\r\n\r\n\r\n The promise is fullfilled after 5 seconds \n");
});
2.返回一个异常Promise
WinJS.Promise.wrapError("Exception thrown inside a promise")
.then(function () {
console.log("complete 1");
}, function () {
console.log("error1");
}).then(function () {
console.log("complete 2");
}, function () {
console.log("error2");
}).then(function () {
console.log("complete 3");
}, function (e) {
console.log("error3");
});
Promise then执行链按顺序执行。
如果有一个链抛出异常则返回一个Error Promise,直到某个then处理了该错误,才返回正常的Promise
输出结果
error1
complete2
complete3
如果第一个和第二个then的错误处理函数没有,则输出为
error3
3.将一个非异步函数包装为异步任务,返回一个Promise
WinJS.Promise.as(nonPromiseAdd(num1, num2));
function nonPromiseAdd(num1, num2) {
return num1 + num2;
}
Promise.as将一个非异步函数包装为异步函数
4.WinJS.Promise 对象的 cancel()方法将异步任务取消。并引发error回掉
5.汇总多个Promise的结果,所有promise执行完毕后,则调用汇总。
WinJS.Promise.join(p).
then(function () {
console.log("finally promise after 3 seconds");
}, function () {
console.log("finally promise after 3 seconds error");
});
p为promise数组,等数组中的所有promise执行完毕后执行。
6.汇总多个promise的结果,有一个promise执行完毕,则调用汇总。
WinJS.Promise.any(p).
then(function () {
console.log(" promise invoked");
});
p为promise数组,数组中有一个promise执行完毕则执行