Я только начинаю работать с bluebird (и с Node в целом).
Я хочу создать несколько макетов (для того, что в конечном итоге будет либо http, либо вызовами базы данных).
Все разговоры об антипаттернах вызывают у меня тревогу :-)
Так является ли это разумным подходом для преобразования этого синхронного кода в промисы?
У меня есть две простые функции здесь. Второй вызывает первый (не так, как это сделал бы сервис prod), но он служит иллюстрацией вложенных промисов.
// mock function to return a promise of a collection
var getTestPatients = function(params) {
return new Promise(function(resolve, reject) {
setTimeout(function() {resolve(test_patients);}, 200);
})
};
// mock function to return a promise of an object
var getTestPatient = function(params) {
return getTestPatients().then(function(patients) {
// wouldnt get entire patient list in prod - but this works for a mock
var patient = _.find(patients, {urn: params.urn});
if (patient) {
patient.reviews = testReviews(params.uid);
}
else {
throw new Error('patient not found');
}
return Promise.resolve(patient);
});
};
Несколько вещей, которые они демонстрируют:
- создание фальшивой задержки
- создание обещания из синхронного кода
- манипулирование результатом обещания в функции, которая делает обещание
- выбрасывание ошибок
Так что довольно много вещей, которые я мог сделать неправильно.
Как я справился? Есть ли здесь антипаттерны? или другие ошибки новичка?
return Promise.resolve(patient);
только наreturn patient;
. Не нужно создавать новое разрешенное обещание и просто возвращать его. Вы можете просто вернуть само значение. - person jfriend00   schedule 05.11.2015getTestPatient
иgetTestPatients
в качестве имен функций позволяет легко запутаться при чтении кода. - person jfriend00   schedule 05.11.2015return Promise.resolve(patient);
на простоreturn patient;
действительно сработало! и чувствую себя лучше :-) - Я могу это сделать, потому что я уже вthen()
, верно? (кстати, вы должны опубликовать как ответ, не так ли?) - person ErichBSchulz   schedule 05.11.2015.then()
становится разрешенным значением промиса. Точно так же выброшенное значение исключения становится отклоненным значением обещания. Это инфраструктура промисов.then()
, которая вызывает ваш обработчик.then()
и, таким образом, получает возвращаемое значение или перехватывает исключение, из-за которого это происходит. - person jfriend00   schedule 05.11.2015