У меня есть следующий код для выбора нескольких контактов и только имена фильтров, которые имеют XYZ. Я использую затем и делаю, чтобы выполнить этот фильтр. В моих контактах есть один контакт с именем XYZ Dude, и я выбираю его также. Не следует ли передавать этот контакт по моему методу после логики фильтрации, которую я применяю в методе then? Любые идеи, что я могу делать неправильно здесьОбещание цепочки не работает. Зачем?
var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
// Open the picker for the user to select a contact.
picker.pickMultipleContactsAsync().then(function (contacts) {
var contactsStartingWithPrefixPa = contacts.filter(function filterContacts(contact) {
if (contact.name.match(/XYZ/))
return true;
return false;
});
}).done(function (contacts) {
// code never reaches here
if (contacts != null) {
contacts.forEach(function (contact) {
if (contact !== null) {
// logic to use this contact
}
}
)}
});
Если функция обратного вызова на обещание возвращает не обещание, он автоматически завершается обещанием этой ценности инфраструктурой. Так что не совсем верно, что у вас должно быть другое обещание, чтобы сделать цепочку. Вы должны что-то вернуть, в противном случае вы получите обещание для неопределенного. –
Спасибо за это разъяснение, Крис. Еще одно обещание всегда необходимо, в конечном счете, но тот факт, что безоговорочное будет автоматически завернуто, полезно знать. –
Да, я тоже этого не знал, похоже, что это может привести к каким-то странным результатам, если вы этого не ожидаете. Вместо того, чтобы просто возвращать 'myObj' и позволять ему автоматически обертываться, может быть яснее явно возвращать' WinJS.Promise.as (myObj) '. – pipedreambomb