2013-05-21 271 views
0

我正在使用下面的代碼在設備中使用phonegap保存聯繫人。我想在所有聯繫人保存成功後執行特定操作。但save()方法是異步的,所以我無法知道所有聯繫人何時保存。將多個聯繫人存儲在電話號碼簿中

有沒有可能不更改save()方法?

如果沒有,那麼save()方法需要進行哪些更改?

for (var i = 0; i < allContacts.length; i++) { 
      var obj = eval(allContacts[i]); 
      var contact = navigator.contacts.create(obj); 
      contact.save(); 
    } 

在此先感謝 約傑什帕特爾

我在上面的代碼

我寫的代碼在iPhone與PhoneGap的恢復多個聯繫人做出改變。我想在所有聯繫人恢復成功後執行某些操作。它的工作正常,如果沒有聯繫人接近400左右,如果我增加約1000附近的聯繫人,然後跳過一些(10到15)的聯繫人。每當我恢復時,我會得到不同的跳過聯繫人。而對於跳過聯繫人失敗()函數不會被調用。接下來我應該做什麼?我需要更改cordova js中的保存方法嗎?

下面是我的代碼:

function storeContacttodevice(json1,callback) { 
    var temp=0; 
    var json2 = json1.split(';'); 
    for(var kl=0;kl<json2.length;kl++){ 
      var jsonparsecontact=JSON.parse(json2[kl]); 
      var myContact = navigator.contacts.create(jsonparsecontact); 
      myContact.save(function onSuccess(contact){ 
         var mssg="Restoring contacts to your device " + temp + " Out 
            Of " + json2.length; 
         $.mobile.showPageLoadingMsg("b", mssg, false); 
         if(temp == json2.length - 1) { 
          return callback(); 
         } 
         temp++; 
         } , 
         function onError(contactError){ 
          alert("Error in saving contacts"); 
          return callback(); 
         } 
         );  
    } 

} 

在此先感謝 約傑什帕特爾

回答

0

你也許可以使用計數器知道的所有聯繫人保存:

function onSuccess(contact) { 
    this.successCount = this.successCount + 1; 
    if (this.contactNumber == this.successCount + this.errorCount) { 
     // You know that all contacts have been saved 
    } 
}; 
function onError(contactError) { 
    this.errorCount = this.errorCount + 1; 
    if (this.contactNumber == this.successCount + this.errorCount) { 
     // You know that all contacts have been saved 
    } 
}; 
... 
... 
// In your function saving the contacts 
this.successCount = 0; 
this.errorCount = 0; 
this.contactNumber = allContacts.length; 
for(var i = 0; i < allContacts.length; i++) { 
    var obj = eval(allContacts[i]); 
    var contact = navigator.contacts.create(obj); 
    contact.save(onSuccess, onError); 
} 

我希望這個解決方案會幫助你。

+0

感謝您的回覆,我以這種方式嘗試了它的工作,如果沒有任何聯繫人接近400,如果我增加了沒有聯繫人到1000然後跳過一些(接近10到15),並滑雪沒有每個恢復時間的聯繫人都不相同。我的意思是如果某些聯繫人沒有被恢復,失敗功能不會被調用? –

相關問題