parse.com承诺 - 我需要在每个“那么”中有一个“错误”功能吗?

时间:2014-04-01 13:29:15

标签: javascript parse-platform promise

parse.com提供了一个云代码部分,以便我可以编写javascript代码来修改我的parse.com数据库。

我有这样一个云代码函数可以执行多项操作 - 例如,检查用户是否存在,以及用户是否存在将某些数据保存在不同的表中,然后更新用户表以引用此新表 - 所以我会有一个parse.Query检查用户是否存在,然后是几个then语句在另一个表上运行更新并获取用户表来引用这个新行。

在这种情况下,我的意思是几个错误函数(例如每个parse.Query一个),或者在一个错误函数中是否可以接受最后then承诺?

1 个答案:

答案 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");
});

在考虑承诺的行为时,请始终考虑同步模拟。