解析云代码承诺错误处理

时间:2015-10-13 01:53:29

标签: javascript parse-platform promise cloud-code

我是JS的新手,也是Promises的新手。

假设我有一系列承诺:

//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) {}都返回了一条自定义错误消息。我希望能够传递自定义错误消息,具体取决于链断开的位置。

我认为它与fail() or reject()有关,但我还没弄清楚如何。

我想知道:

1:如何返回我想要的自定义错误消息?

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

谢谢!

1 个答案:

答案 0 :(得分:0)

  1. 如果您要覆盖拒绝承诺的错误消息,可以使用df.iloc[[0,2,4], :] 来添加您怀疑的处理程序。
  2. 虽然你的承诺可以按照书面形式运作,但它们可以整理起来:

    • .fail应包含isUserInCooldown检查,以便不会污染其他功能。
    • 如果hoursRemaining > 0不依赖于challenge.save,则同时关闭它们并使用objectsToSave会更快。
    • 您永远不会像云功能那样致电Parse.Promise.whenresponse.success
  3. 你在这里所做的事情是毫无意义的,因为我重申要证明一点:

    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)