Обработка PromiseRejection в node.js
Я только начал работать с JavaScript в первый раз. Из поиска в Google я смог найти примеры обработки отклонения обещаний только через функции, которые вы написали. Моя проблема в том что
app.getInput("key");
не написано мной. Я хочу быть в состоянии обработать отклоненное обещание в моем коде. Мой мозг испытывает проблемы с "получением JavaScript" в данный момент.
У меня есть эта функция (в рамках jovo)
var content = app.getInput('content');
Я получаю сообщение об ошибке "Ошибка типа: не удается прочитать свойство" содержание "неопределенного". Я знаю, почему я получаю эту ошибку, я просто хочу иметь возможность справиться с ситуацией, когда нет контента.
Он также говорит: "UnhandledPromiseRejectionWarning: необработанное отклонение обещания"
Я просто хочу иметь возможность написать что-то вроде
var content = "null";
content = testFunc().then(() => {
console.log('resolved content!');
}).catch((err) => {
console.log('error content');
content = "null";
});
function testFunc(){
return app.getInput('content');
}
3 ответа
Странно, что не асинхронный метод возвращает ошибку таким способом. Во всяком случае, теперь, как справиться с этим
Оберните это с помощью try / catch
let content;
try {
content = app.getInput('content');
// All is ok there
...
} catch (err) {
...
}
@ Габриэль Блю
function a() {
throw new Error('Error');
}
async function testFunc() {
try {
const content = a();
console.log('No error');
return content;
} catch(err) {
console.log('Error');
return null;
}
}
testFunc();
Самый простой способ справиться с обещанием - использовать async/await
async function testFunc() {
try {
const content = await app.getInput('content');
return content;
} catch(err) {
return null;
}
}
Из вашего описания и из JOVO документов, я понимаю, что getInput()
это синхронный метод. Ошибка TypeError: Cannot read property 'content' of undefined
бросается звонящему (ваш код). Похоже, что фреймворк не инициализирован должным образом, undefined
вещь заставляет меня верить в это.
Как Grégory NEUT
ответил ранее, вы используете try/catch
блок, чтобы справиться с этим.
try {
content = app.getInput('content');
// All is ok there
} catch (err) {
// content is unavailable, inspect the error
}
Другая проблема, "UnhandledPromiseRejectionWarning: Unhandled promise rejection"
происходит, когда обещание отклонено и не выполнено. Возможно, try/catch
решил бы это, но, возможно, нет. Дело в том, что когда вы звоните testFunc()
и он терпит неудачу, он не возвращает отклоненное обещание, поэтому у него не будет метода .then()
как ты и ожидал. Gabriel Bleu
Решение будет гарантировать, что вы получите обещание в любом случае.