输出两行信息:我们发明第二个then办法接收到的最终值是undefined,为什么呢?看看第一个then办法调用后返回的promise状况如下:
如上图,发明调用第一个then办法后,返回promise最终值为undefined,传递给第二个then的回调,如不雅把膳绫擎的例子稍加修改:
- var promise = new Promise((resolve, reject) => {
- setTimeout(function() {
- resolve('完成');
- }, 10);
- });
- promise.then((msg) => {
- console.log('first messaeg: ' + msg);
- return msg + '第二次';
- }).then((msg) => {
- console.log('second messaeg: ' + msg);
- });
输出如下:
起首创建一个构造函数,供实例化创建promise,该构造函数接收一个函数参数,实例化时,会急速调用该函数,然后返回一个Promise对象:
此次两个then办法的回调都接收到了最终值,正如我们前文所说,'then'办法返回一个新promise,并且该新promise根据其传入的回调履行的返回值,进行决定,而函数未明白return返回值瓯,默认返回的是undefined,这也是膳绫擎实例第二个then办法的回调接收undefined参数的原因。
参数
这里应用了链式调用,我们须要明白:共产生三个promise,初始promise,两个then办法分别返回一个promise;而第一个then办法返回的新promise是第二个then办法的主体,而不是初始promise。
Promise.prototype.catch(onRejected)
该办法为promise添加拒绝回调函数,将返回一个新promise,该新promise根据回调函数履行的返回值进行决定;若promise决定为完成状况,则新promise根据其最终值进行决定。
- var promise = new Promise((resolve, reject) => {
- setTimeout(() => {
- reject('failed');
- }, 0);
- });
- var promise2 = promise.catch((reason) => {
- console.log(reason);
- return 'successed';
- });
- var promise3 = promise.catch((reason) => {
- console.log(reason);
- });
- var promise4 = promise.catch((reason) => {
- console.log(reason);
- throw 'failed 2';
- });
输出如下图:
膳绫擎例子是同步代码履行的异常,当异常产生在异步义务内时,又会若何呢?,假如把上例中代码放在一个setTimeout准时器内履行:
推荐阅读
电信运营商(Telcos)和收集办事供给商(ISP)面对着应用动态拓扑调剂的挑衅,以确保连接的稳定性和持续性。这意味>>>详细阅读
地址:http://www.17bianji.com/lsqh/35174.html
1/2 1