2014-07-13 111 views
0

我試圖做到的是,當我把這種雲功能(deploy),它會首先從toClass刪除所有數據,然後在fromClass遍歷對象,複製並保存他們toClass 。當它保存一個對象時,它也會從fromClass中刪除它。簡而言之,將對象從課程移到另一課程。在客戶端調用此函數解析雲功能失敗,錯誤141

[PFCloud callFunctionInBackground:@"deploy" withParameters:@{@"toClass": kTilrClassUpdates, @"fromClass": kTilrClassPrototypeUpdates} block:^(id object, NSError *error) { 
    if (error) { 
     [self failed]; 
    } else { 
     [self succeeded]; 
    } 
}]; 

將顯示此錯誤消息客戶端日誌:Error: undefined (Code: 141, Version: 1.2.19)

下面是解析雲代碼:

Parse.Cloud.define("deploy", function(request, response) { 
    var query = new Parse.Query(request.params.toClass); 
    query.find({ 
     success: function(results) { 
      for (var i = 0; i < results.length; ++i) { 
       console.log(results[i]); 
       results[i].destroy({ 
        success: function(object) { 

        }, 
        error: function(object, error) { 
         response.error(error); 
        } 
       }); 
      } 
     }, 
     error: function() { 
      response.error(error); 
     } 
    }); 
    var query2 = new Parse.Query(request.params.fromClass); 
    query2.find({ 
     success: function(results) { 
      for (var index = 0; index < results.length; ++index) { 
       var UpdateInfoClass = Parse.Object.extend(request.params.toClass); 
       var updateInfo = new UpdateInfoClass(); 
       for (var k in results[index]) { 
        updateInfo.set(k, results[index][k]); 
       } 
       console.log(updateInfo); 
       updateInfo.save(null, { 
        success: function(updateInfo) { 
         results[index].destroy(); 
         if (index == results.length - 1) { 
          response.success(); 
         } 
        }, 
        error: function(updateInfo, error) { 
         response.error(error); 
        } 
       }); 
      } 
     }, 
     error: function() { 
      response.error(error); 
     } 
    }); 
}); 

我真的不知道太多關於JavaScript ,所以這可能是一個非常簡單的錯誤。

回答

1

有兩節可以保證的問題給你: 雖然不否認你的設計:

1)查詢不鏈接在一起,將在同一

2運行),你不能使用

for (var k in results[index]) { 
    updateInfo.set(k, results[index][k]); 
} 

將屬性從一個對象複製到另一個對象。 您需要撥打JSON.stringify(results[index])才能獲得標準陣列。 您應該設置喜歡request.object.set(fiedlName, value)的值。

3)「索引」不會正確地傳播到子塊中 - 將其記錄到控制檯中,你會看到,因爲這些查詢也沒有被鏈接,並且它會立即運行,因此索引將有一些值或最後之一,因爲它是快速

然而,你的設計方法是值得商榷的:

上解析數據庫是從普通的SQL數據庫有點不同,你或許應該重新設計你的方法可能使用一個類裏通過名稱標記對象的類或者改變它們的狀態(deploy = 0/1),很難猜測你想要完成什麼,但是你的方式保證了一些問題。

另外請注意,cloudcode函數確實有一些超時,所以一旦你有更多的對象,你可能無法保存所有的對象。 (150個對象是樂觀看法)

您可以通過編寫適當的「.beforeSave」函數來實現您的解決方案,該函數在您保存對象時觸發,這樣您就可以根據您的標準用新對象替換舊對象...

+0

您對一個班級和不同州的建議聽起來很棒。我會嘗試一下,但是我必須重寫我的客戶端邏輯,以免它立即完成。 – imas145