Javascript 解析云代码承诺错误处理

Javascript 解析云代码承诺错误处理,javascript,parse-platform,promise,parse-cloud-code,Javascript,Parse Platform,Promise,Parse Cloud Code,我对JS有些陌生,对承诺也很陌生 假设我有一系列承诺: //var challenge is created before all this isUserInCooldown().then( function(hoursRemaining) { if (hoursRemaining > 0) { return Parse.Promise.error("You can't challenge 'cuz you're on cooldown.");

我对JS有些陌生,对承诺也很陌生

假设我有一系列承诺:

//var challenge is created before all this

isUserInCooldown().then( function(hoursRemaining) 
{
    if (hoursRemaining > 0) 
    {
        return Parse.Promise.error("You can't challenge 'cuz you're on cooldown.");
    }

    var objectsToSave = [];

    //DO SOME STUFF TO THE OBJECTS

    return Parse.Object.saveAll(objectsToSave);

}).then( function(list)
{
    //DO SOME STUFF TO CHALLENGE

    return challenge.save(null);

}).then( function(challenge) 
{
    return Parse.Promise.as(challenge);
},
function(error) 
{
    if (theSaveAllFailed) { return "Couldn't save all"; }
    if (theSaveFailed) { return "Couldn't save the challenge"; }
    //etc.
});
我正在重构一组使用回调的代码,每个
error:function(error){}
返回一条自定义错误消息。我希望能够传递一个自定义的错误消息,这取决于链的故障位置

我想这和我的工作有关,但我还不知道怎么做

我想知道:

1:我怎样才能像我想要的那样返回自定义错误消息

2:我是否正确地使用了承诺(基于您在这里看到的内容?)

谢谢

  • 如果要覆盖承诺拒绝的错误消息,可以使用
    .fail
    添加怀疑的处理程序
  • 虽然您的承诺将按书面形式起作用,但它们可以被整理:

    • isuserincoldown
      应包括
      hoursresleving>0
      检查,以免污染其他功能
    • 如果
      challenge.save
      不依赖于
      objectsToSave
      ,则同时触发它们,并使用
      Parse.Promise.when
      将更快
    • 您从不根据云函数的要求调用
      response.success
      response.error
  • 你在这里所做的是毫无意义的,我重复一遍来证明这一点:

    .then(function(challenge){
      return Parse.Promise.as(challenge);
    }).then(function(challenge){
      return Parse.Promise.as(challenge);
    }).then(function(challenge){
      return Parse.Promise.as(challenge);
    });
    
    啊,好多了:

    isUserInCooldown().then( function() {
      return Parse.Object.saveAll(objectsToSave).fail(function(){
        return "Couldn't save all";
      });
    }).then( function(){
      return challenge.save().fail(function(){
        return "Couldn't save the challenge";
      });
    }).then(response.success, response.error)
    
    或者,如果您没有使用云功能:

    .fail(function(error) {
      console.log(error); //logs "Couldn't save all" or "Couldn't save the challenge"
    });