【问题标题】:Parse Cloud Code Promise error handlingParse Cloud Code Promise 错误处理
【发布时间】:2016-01-10 15:01:36
【问题描述】:

我对 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:我是否正确使用了 Promise(根据您在此处看到的内容?)

谢谢!

【问题讨论】:

    标签: javascript parse-platform promise parse-cloud-code


    【解决方案1】:
    1. 如果您想覆盖 Promise 拒绝的错误消息,您可以使用.fail 添加您怀疑的处理程序。
    2. 虽然您的承诺会按照书面规定发挥作用,但它们可以被整理:

      • isUserInCooldown 应该包括 hoursRemaining > 0 检查,这样它就不会污染其他功能。
      • 如果challenge.save 不依赖于objectsToSave,同时将它们都关闭并使用Parse.Promise.when 会更快。
      • 您永远不会根据云功能的需要调用response.successresponse.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"
    });
    

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 2016-11-12
      • 2016-09-29
      • 2018-03-19
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多