2015-04-07 32 views
1

這是我的代碼,它遍歷forEach並打印出'1',但永遠不會從object.save返回()&絕不會打印出2,3或其他任何東西。我嘗試了其他一些方法,但似乎沒有任何工作。In parse object.save();不返回任何原因?

注意:response.succes(或錯誤)沒有在任何地方被調用,代碼肯定在等待object.save()完成。

var promise = new Parse.Promise(); 

var query = new Parse.Query("SomeClass"); 
query.find().then(function(results) { 
    var promises = []; 

    results.forEach(function(object) { 
     object.set("SomeColumnName", true); 
     console.log('1'); 

     promises.push(object.save(null, { 
      success: function(result) { 
       alert('2');     
       return ; 
      }, 
      error: function(result, error) { 
       alert('3'); 
       return ; 
      } 
     })); 
    }); 

    Parse.Promise.when(promises).then(function() { 
     console.log('inside resolve'); 
     promise.resolve(); 
    }, function() { 
     console.log('inside reject'); 
     promise.reject(); 
    }); 
}); 

return promise; 

回答

1

你走的是正確的軌道,但你應該利用這個事實,即大多數sdk函數爲你創建並返回promise。有了這些,你可以大大簡化代碼:

// very handy utility library that provides _.each among many other things 
// www.underscorejs.org 
var _ = require('underscore'); 

// answer a promise to modify all instances of SomeClass 
function changeSomeClass() { 
    var query = new Parse.Query("SomeClass"); 
    // if there are more than 100 rows, set query.limit up to 1k 
    return query.find().then(function(results) { // find returns a promise 
     _.each(results, function(result) { 
      result.set("SomeColumnName", true); 
     }); 
     return Parse.Object.saveAll(results); // and saveAll returns a promise 
    }); 
} 

把它包在雲功能和呼叫成功/錯誤是這樣的:

Parse.Cloud.define("changeSomeClass", function(request, response) { 
    changeSomeClass().then(function(result) { 
     response.success(result); 
    }, function(error) { 
     response.error(error); 
    }); 
}); 
0

每個對象一次只能發生一個Parse請求。如果發送多個請求,則除第一個之外的所有請求均被忽略。您可能正在嘗試執行此操作,而其他線程正在爲這些對象進行Parse請求。我知道,如果你保存一個對象,它也保存它的子對象,所以你可能會遇到問題。確保在完成塊的後臺線程中儘可能多地執行,或者儘可能使用saveEventually/fetchEventually。

+1

你的意思是object.save()不是異步和是不是已經在另一個線程?我相信這也是雲代碼。 – Thellimist

相關問題