保存 Cordova 联系人插件后获取 contact.id

Getting contact.id after saving Cordova contact plugin

保存后我需要取回联系人 ID,以便将其保存到我的在线数据库中。然而,cordova contact.save() 方法在执行后没有 return id。

这是我的逻辑:

if ($scope.contact.id === undefined) {
            contact.save();
            console.log("Contact ID is:", savedContact.id);
            table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
        }

这不起作用。

有没有什么方法可以检索联系人的 ID,而不必像这样使用 phone 号码搜索 phone 的联系人列表:

if ($scope.contact.id === undefined) {
            contact.save();
            var savedContact = navigator.contacts.find({ "phoneNumbers[0]": phoneNumbers[0].value });
            console.log("Contact ID is:", savedContact.id);
            table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
        }

以上似乎开销太大了。更不用说它甚至可能 return 正确的联系人,因为 phone 号码可能不是唯一的。(如果有人用不同的信息保存联系人两次)

contact.save() 可以接受两次回调,成功和失败。成功回调应该 return 您新保存的联系人(包括 ID。)

if ($scope.contact.id === undefined) {
  contact.save(contactSuccess, contactFailure);  
}

function contactSuccess(newContact) {
  console.log("Contact ID is:", newContact.id);
  table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}

function contactError(err) {
  //bb10 fires multiple error callbacks with empty errors
  if (err) {
    console.log(err);   
  }
}

因为您似乎在使用 Angular,请查看 ngCordova project. It provides some nice wrappers around some plugins that make everything a bit more readable. Here is the relevant excerpt from their contacts docs:

$cordovaContacts.save($scope.contactForm).then(function(savedContact) {
  console.log("Contact ID is:", newContact.id);
  table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}, function(err) {
  if (err) {
    console.log(err);   
  }
});