2016-06-23 51 views
0

Parse Server上的以下Cloud代碼功能無法按預期工作。爲什麼此解析雲代碼中的承諾不起作用?

它似乎太早解決,以致並非所有鏈接的承諾promise2都被執行。特別是我看到一些resultA.add(...);沒有被執行。

我試圖重新安排這次幾次沒有成功。

我不知道return Parse.Promise.resolve();是我應該在else條款返回還是如果它是別的什麼也不是。

任何人都可以在這裏找到一些東西嗎?

Parse.Cloud.define("aFunction", function(request, response) { 

    var q = new Parse.Query("ClassA");  
    q.find() 
    .then(
     function(resultsA) { 

      var promise = new Parse.Promise.as(); 
      resultsA.forEach(function(resultA) { 

       promise = promise 
       .then(
        function() { 
         var q = new Parse.Query("ClassB"); 
         return q.first(); 
        } 
       ) 
       .then(
        function(resultB) { 

         if (resultB != undefined) { 
          resultA.set(...); 
          return resultA.save(); 

         } else { 
          resultA.set(...); 
          return resultA.save(); 
         } 
        } 
       ) 
       .then(
        function() { 

         var q = new Parse.Query("ClassC"); 
         return q.find() 

         .then(
          function(resultsC) { 
           if (resultsC != undefined && resultsC.length > 0) { 

            var promise2 = new Parse.Promise.as(); 
            resultsC.forEach(function(resultC) { 
             promise2 = promise2 
             .then(
              function() { 
               resultA.add(...); 
               return resultA.save(); 
              } 
             ); 
            }); 
            return promise2; 

           } else { 
            return Parse.Promise.resolve(); 
           } 
          } 
         ); 
        } 
       ); 
      }); 
      return promise; 
     } 
    ) 
    .then(
     function(result) { 
      response.success("success"); 
     }, 
     function(error) { 
      response.error(error.message); 
     } 
    ); 
}); 

長代碼,但我已經剝離下來,並希望顯示實際結構。謝謝。

+0

是,'返回undefined'或'返回Promise.resolve(不確定)'(達到同樣的效果)似乎是適當的。 – Bergi

+0

等待,對於Parse API,它是'返回Parse.Promise.as(undefined)',而不是'.resolve' – Bergi

+0

@Bergi'.as'方法似乎用於預定義已解析承諾的返回值承諾宣告時間。要真正解決承諾,仍然需要調用'.resolve'。換句話說'Parse.Promise.as(aValue); Parse.Promie.resolve();'相當於'Parse.Promise.resolve(aValue);'。 – Manuel

回答

0

剛剛檢查了您的代碼。 我不確定這是你的類型錯誤,當你'清理你的代碼'顯示結構。

在循環:chats.forEach(函數(resultA)..

好像你還沒有宣佈「聊天」變量

此外,作爲解析官方推薦,請嘗試以下幾點:

var _ = require('underscore.js'); 

var promise = Parse.Promise.as(); 
_.each(resultsA, function(resultA) { 

    promise = promise.then(function() {..}.then..then.. 
} 
return promise; 

希望這可以幫助你。

+0

謝謝,'聊天'是一個錯誤,代碼糾正。我在其他功能中使用'Parse.Promises',它們工作正常。我認爲這是由於嵌套承諾的結構,它不起作用。 – Manuel

相關問題