У меня есть мелкое понимание JavaScript Promise и цепочки обещаний. Скажите, у меня есть метод, как показано ниже. Это написано в машинописном, но может быть изменено, чтобы соответствовать JavaScript ES6Возврат обещания от функции
private InsertPersonInDB(p : Person) {
return this.db.find({ //<- would this return?
selector: {objType: 'Person'},
fields: ['_id'],
sort: ['_id']
}).then(result => {
let allpersondIds : string[] = [];
(result.docs).forEach(rec => {
allpersondIds.push(rec._id);
});
return allpersondIds;
}).then (allpersonIdsInDB => {
var id = this.getIdfromPersonName(person.personName, allpersonIdsInDB);
person._id = id;
return this.db.post(person) //<- or would this return?
}
}
//Calling function
for(let person of this.persons) {
InsertPersonInDB(person).then(result => {
console.log(result)
//Some UI updates
}).catch(err => {
console.log(err)
//Some UI updates notifying user about failure
});
}
Вот, у меня есть два возвращения, первым является
возвращения this.db.find
который найти Функция является обещанием
и конец цепи затем возвращается
возвращение this.db.post (человек)
даже пост функция является обещание.
Вот, у меня есть три вопроса
1) Когда эта функция выполняется, что бы вернуться?
2) Если функция немедленно возвращает обещание, когда цепочка thens выполнить?
2) Каковы лучшие подходы к рефакторингу цепочки обещаний в многоуровневом приложении. Например. Несколько цепочек , то необходимо выполнить в сервисе, другие должны быть выполнены в пользовательском интерфейсе, как я могу структурировать свой код обещаний?
Я не уверен, правильно ли понимаю ваш аргумент. Я считаю, что исполнителем является часть 'function (resolve, reject)'. В этом нет никакого заявления о возврате; он вызывает только метод 'resolve'. – Sjoerd
Не могли бы вы привести рабочий пример Плункера, потому что я все еще не уверен, что вы имеете в виду. Если вы хотите связать 'then', вы возвращаете новые обещания из своего 'then'. В тексте MDN объясняется, что вы можете либо построить новое обещание, которое разрешает, либо просто возвращает любое значение (которое затем будет автоматически завернуто в Promise и разрешено для вас). Если оставить заявления о выходе, это также не позволит вам передавать информацию с 'then' на' then'. – Sjoerd
Вау, я не знал, что вы можете «вернуть любое значение (которое затем будет автоматически завернуто в обещание и разрешено для вас)». Вы абсолютно правы. Я удалю мои смутные комментарии. – ArneHugo