1

私は次の機能を持っています:

function pickContacts() {
    var output = "";

    // Create the picker
    var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
    picker.commitButtonText = "Select";

    var emailsPromise = new WinJS.Promise(function () {

        // Open the picker for the user to select contacts
        picker.pickMultipleContactsAsync().then(function (contacts) {
            if (contacts.length > 0) {
                // Get selected e-mails                
                contacts.forEach(function (contact) {
                    contact.emails.every(function (email) { output += email.value + ";"; });
                });
                return output;
            } else {
                return "";
            }
        });
    });

    return emailsPromise;
};

これにより、選択した連絡先からの電子メールアドレスのリストが表示されます。次に、それを使用したいと思います。これが私のコードです:

document.getElementById("findEmail").addEventListener("click", function () {
    var emailAdd = document.getElementById("email");
    pickContacts().done(function (emails) {
         emailDets.value = emails;
    });
});

しかし、pickContactsから戻り値を取得していません(実際に返されると判断しました)。返されたpromiseの処理方法に問題があると推測していますが、デバッグできないようです(それにステップインしようとすると、関数が終了します)。

私は何が間違っているのですか?

4

2 に答える 2

1

完了したコールバックをpromise関数のパラメーターとして渡してから、渡したい結果を使用して呼び出す必要があります。本質的に:

var emailsPromise = new WinJS.Promise(function () {

    // Open the picker for the user to select contacts
    picker.pickMultipleContactsAsync().then(function (contacts) {
        if (contacts.length > 0) {
            // Get selected e-mails                
            contacts.forEach(function (contact) {
                contact.emails.every(function (email) { output += email.value + ";"; });
            });
            return output;
        } else {
            return "";
        }
    });
});

になります:

var emailsPromise = new WinJS.Promise(function (complete, error, progress) {

    // Open the picker for the user to select contacts
    picker.pickMultipleContactsAsync().then(function (contacts) {
        if (contacts.length > 0) {
            // Get selected e-mails                
            contacts.forEach(function (contact) {
                contact.emails.every(function (email) { output += email.value + ";"; });
            });
            complete(output);
        } else {
            complete("");
        }
    });
});
于 2013-03-19T19:48:25.743 に答える