在我们开始正式介绍之前,我们想看看Javascript Promise的样子:
resolve(“hello world”);
});
p.then(function(str) {
alert(str);
});
1. then()返回一个Forked Promise
以下两段代码有什么区别呢?
var p = new Promise(/*…*/);
p.then(func1);
p.then(func2);
// Exhibit B
var p = new Promise(/*…*/);
p.then(func1)
.then(func2);
如果你认真以上两段代码等同的话,那么Promises只不过是一个一维的回调函数数组。然而,其实不是这样的。每一个then()调用都返回一个forked promise。因此,ExhibitA中,如果func1()抛出一个异常,func2()仍旧正常调用。
在ExhibitB中,如果func1()抛出一个错误,fun2()将不会被调用,因为第一个调用返回了一个新的promise,这个在func1()中会被拒绝。结果是func2()被跳过。
总结:promises可以被fork成多个路径,类似复杂的流程图。
2. Callback应该传递结果
当你运行下面代码的时候什么会得到警告提示呢?
resolve(“hello world”);
});
p.then(function(str) {})
.then(function(str) {
alert(str);
});
第二个then()中的alert没有显示任何内容。这是因为回调函数,在promise的上下文中,因为结果的变化并没有回调函数。promise期望你的回调函数返回同样的结果或者返回一个替换结果,然后被传递到下一个回调函数中。
类似使用adpater来变化结果,如下:
var p = new Promise(/*…*/);
p.then(feetToMetres)
.then(function(metres) {
alert(metres);
});
3. 只有来自上一层的异常可以被捕捉
这两段代码有什么区别?
new Promise(function(resolve, reject) {
resolve(“hello world”);
})
.then(
function(str) {
throw new Error(“uh oh”);
},
undefined
)
.then(
undefined,
function(error) {
alert(error);
}
);
// Exhibit B
new Promise(function(resolve, reject) {
resolve(“hello world”);
})
.then(
function(str) {
throw new Error(“uh oh”);
},
function(error) {
alert(error);
}
);
—-想了解更多的linux相关异常处理怎么解决关注<计算机技术网(www.ctvol.com)!!>
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/jspttutorial/69261.html