parse.com提供了一个云代码部分,以便我可以编写javascript代码来修改我的parse.com数据库。
我有这样一个云代码函数可以执行多项操作 - 例如,检查用户是否存在,以及用户是否存在将某些数据保存在不同的表中,然后更新用户表以引用此新表 - 所以我会有一个parse.Query检查用户是否存在,然后是几个then
语句在另一个表上运行更新并获取用户表来引用这个新行。
在这种情况下,我的意思是几个错误函数(例如每个parse.Query一个),或者在一个错误函数中是否可以接受最后then
承诺?
答案 0 :(得分:6)
是。它是可以接受的。
Promise就像异常一样,每个.then
都有一个错误函数就像为每个语句都有一个.catch
块:
try{
first();
} catch(e) {
//handle
}
try{
second();
} catch(e) {
//handle
}
try{
third();
} catch(e) {
//handle
}
通常,拥有一个捕获更自然,更清晰
try {
first();
second();
third();
} catch (e) {
// handle error in whole flow.
}
同样承诺:
first().then(second).then(third).catch(function(e){ /* handle error */});
或者,没有像Parse.Promise
这样的捕获的实现:
first().then(second).then(third).then(null,function(e){ /* handle error */ });
控制流程将与您期望的完全一样 - 如果first
失败,那么它将由第一个错误处理程序处理,它将不< / em>在此过程中执行和实现回调:
Parse.promise.as(true).then(function(){
throw new Error("Promises are throw safe and throws are rejections! funstuff");
}).then(function(){
alert("This will never show");
}).then(function(){
alert("This will never show either");
}).then(null,function(e){
alert("This is the error handler!" + e.message);
}).then(function(){
alert("Since the error was handled this will show");
});
在考虑承诺的行为时,请始终考虑同步模拟。