У меня есть метод на сервере WebApp с помощью узла, который будет выполнять несколько асинхронных действий, например:Бросить разные ошибки в цепочку обещаний?
function saveTopValuePages(pageSize, clientId )
setExistingCredentials(clientId)
.then(function() {
return getViewIdByClientId(clientId);
}, function(error) {
throw new customErrors.SetExistingCredentials('test123')
})
.then(function(viewId) {
return fetch(viewId, options)
}, function(error) {
throw new customErrors.GetViewIdByClientId('abcasdasd')
})
.then(function(response) {
return response;
})
После этого будет мой вызовом этого функция из моих маршрутов:
analytics.saveTopValuePages(pageSize, clientId)
.then(function(data) {
res.status(200)send({ message: 'success'})
}
}).catch(customErrors.SetExistingCredentials, function(error) {
res.status(400).send({ error: error})
}).catch(customErrors.GetViewIdByClientId, function(error) {
res.status(401).send({error: error})
}).catch(function(e){
res.status(500).send({ error: "Unknown internal server error" });
});
Как вы можете см. в моем примере, я пытаюсь выбросить ошибку в зависимости от того, какая часть процесса завершилась неудачно. Это будет работать, если все эти действия будут независимо друг от друга, но наоборот. Таким образом, если setExistingCredentials
не работает, все следующие функции потерпят неудачу.
Это вызывает то, что если setExistingCredentials
не удался, ошибка будет выбрана, а также ошибка GetViewIdByClientId
. Наконец, ошибка, которую я поймаю, будет последней (GetViewIdByClientId
в этом случае), а не правильной.
Итак, я не уверен, был ли это правильный подход, если есть какой-либо другой образец обещаний для достижения нужных мне результатов.
Заранее благодарен!
почему вы не использовать нативную ошибку? 'var error = new Error (« Ошибка произошла »); throw error; ' – DomeTune
Я пытаюсь использовать этот подход раньше, но это то же самое, последняя ошибка - это то, что было распространено на catch, поэтому оно всегда является ошибкой« getViewIdByClientId ». – Nicolas
Как будут выполняться последующие операции, если они зависят от броска? –