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();
     }

在此先感谢 Yogesh Patel

我对上面的代码进行了更改

我已经编写了用于使用 Phonegap 在 Iphone 中恢复多个联系人的代码。我想在所有联系人恢复成功后执行某些操作。如果我将联系人数量增加到大约 1000 个附近,那么它的工作正常,如果联系人数量接近 400,那么它会跳过一些(10 到 15 个)联系人。每次我恢复时,我都会得到不同的跳过联系人。并且对于跳过联系人,不调用 fail() 函数。接下来我该怎么办?我需要更改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();
                        }
                        );       
    }

}

在此先感谢 Yogesh Patel

4

1 回答 1

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);
}

我希望这个解决方案能帮助你。

于 2013-05-21T08:04:36.957 回答