Обещание - это особый объект, который либо преуспевает с результатом, либо проваливается с отклонением.Синтаксис async-await является синтаксическим сахаром, помогающим справиться с обещаниями.
Если вы определите функцию как aync, она всегда вернет обещание.
Дажефункция, которая читается как
const foo = async() => {
return "hello";
}
, возвращает обещание строки, а не только строки.И вам нужно подождать, пока он не будет решен или отклонен.
Это аналог:
const foo = async() => {
return Promise.resolve("Hello");
}
или:
const foo = async() => {
return new Promise(resolve => resolve("Hello"));
}
Ваш fetchWalls
аналогично является обещаниемэто останется в ожидании какое-то время.Вы должны убедиться, что он либо будет успешным, либо неудачным, настроив обработчики then
или catch
во внешней области:
fetchWalls()
.then(console.log)
.catch(console.error);
Внешняя область никогда не будет асинхронной, поэтому вы не можете использовать awaitтам.Вы можете использовать await только внутри других асинхронных функций.
Я бы также не использовал ваш try-catch для обработки обещаний внешней области.Я думаю, что вы путаете подход try-catch, который предназначен для использования в асинхронных функциях, так как там это помогает избежать вложения и читается как синхронный код:
Например, вы можете сделать внутриваше fetchWalls
определение:
const fetchWalls = async function (){
var jsonQuery = [{ "recordType": "page","query": "pageTemplate = 1011"}]
try {
let body = await utils.fetchAPI(jsonQuery)
} catch(e) {
// e is the reason of the promise rejection if you want to decide what to do based on it. If you would not catch it, the rejection would chain through to the first error handler.
}
...
}