2016-01-24 220 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

現在

,你應該能夠使用CustomFunction像這樣

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

由於使用的結果,但我有一些情況下,我想失敗在gameScore.save()。然後(},所以我不想這樣做returnScoreScore.save(); – tech74

+0

這是一個從'CustomFunction'返回承諾的事情。要麼你返回承諾,要麼履行承諾(解析/拒絕)並返回值,你不能同時使用這兩個場景,如果你想返回一個promise,那麼在調用者中處理錯誤,如果你想在'CustomFunction'中處理錯誤,是b只有在那裏才能履行承諾。 – Achrome

+0

謝謝,那麼如何處理CustomFunction中的承諾 – tech74

1

然後在。然後你CustomFunction()回調充當過濾器。如果您想首先更改已解決/已拒絕的結果,則可以在此處執行此操作。否則,請勿使用.then()。只返回.save()函數

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

之後,使用.done(結果)或.fail(錯誤)

CustomFunction().done(function(result){ console.log(result); });