2016-01-24 4 views
0

Я использую библиотеку Parse Baas. У меня есть определенные функции, которые вызывают различные функции кода Parse Cloud. В настоящее время у меня есть базовое понимание обещаний javascript. Одна вещь, с которой я борюсь, - это как обрабатывать следующиеВозвращаемое обещание от функции

У меня есть пользовательская функция, которую я могу вызывать из других модулей.

function CustomFunction() 
    { 
     var GameScore = Parse.Object.extend("GameScore"); 
     var gameScore = new GameScore(); 
     gameScore.set("score", 1337); 
     gamesScore.save().then(
      function(object) { 
       // the object was saved. 
       // What do I return from here?? 
     }, 
     function(error) { 
       // saving the object failed. 
       // What do I return from here?? 
     }); 
    } 

Есть некоторые случаи, когда я, возможно, хочу потерпеть неудачу в gamesScore.save(). Затем (функция (объект) {}, так что я не хочу делать только вернуть gamescore.save(). Теперь, когда я называю пользовательскую функцию это действительно необходимо вернуть обещание как код, содержащееся в нем есть «асинхронное». Так что я вернулся из внутри пользовательской функции.

CustomFunction().then(
     function(result) { 

    }, 
    function(error) { 

    }); 

ответ

1

с gamesScore.save() уже обещание, вы можете просто вернуть его с CustomFunction

function CustomFunction() { 
    ... 
    return gamesScore.save(); 
} 

Теперь вы должны быть в состоянии использовать CustomFunction как так

CustomFunction().then(function(data) { 
    ... 
}, function(err) { 
    ... 
}); 
+0

Спасибо, но у меня есть некоторые случаи, когда я хотел бы потерпеть неудачу в gamesScore.save(). then (}, поэтому я не хочу делать это return gamesScore.save(); – tech74

+0

Это вещь с возвратом обещания от 'CustomFunction'. Либо вы возвращаете обещание, либо выполняете обещание (разрешить/отклонить) и вернуть значение. Вы не можете иметь оба сценария в игре. Если вы хотите вернуть обещание, обработайте ошибку в вызывающем. Если вы хотите обработать ошибку в 'CustomFunction', быть b чтобы справиться с обещанием только там. – Achrome

+0

Спасибо, так как я могу выполнить обещание внутри CustomFunction – tech74

1

Тогда .then() обратного вызова в вашем CustomFunction служит в качестве фильтра. Если вы хотите сначала изменить разрешенные/отклоненные результаты, вы можете это сделать. В противном случае не используйте .then(). Просто вернуть функцию

function CustomFunction() 
{ 
    var GameScore = Parse.Object.extend("GameScore"); 
    var gameScore = new GameScore(); 
    gameScore.set("score", 1337); 
    return gamesScore.save(); 
} 

.save() Затем используйте результат с помощью .done (результат) или .fail (ошибка)

CustomFunction().done(function(result){ console.log(result); }); 
Смежные вопросы