object Promise вместо значения

229
25 июля 2017, 20:19

Привет. Есть две функции, использующие async await:

function getAirportViaJson(code) {
    return new Promise(resolve => {
        $.getJSON('/json/airports.travelpayouts.json', function(data){
        for(let i = 0; i < data.length; i++)
            if(code == data[i].code)
                resolve(data[i].name_translations.ru);
        });
    });
}
async function getAirportByCode(code) {
    let airport = await getAirportViaJson(code);
    return airport;
}
getAirportByCode('SVO');

Функция должна возвращать значение Шереметьево, исходя из его IATA-кода SVO, но почему-то возвращается [object Promise]. Почему?

Answer 1

Вы объявили async функцию. Это значит, что возвращает она promise. Так как она находится на т.н. "верхнем уровне" необходимо promise обработать ручками, без await И пожалуйста, не забывайте что в теле async функции должен присутствовать блок try...catch, иначе uncaught promise rejection вас ждет

function getAirportViaJson() { 
  return new Promise(resolve => { 
    resolve("123"); 
  }); 
} 
 
async function getAirportByCode(code) { 
    try { 
      let airport = await getAirportViaJson(); 
      return airport; 
    } catch (err) { 
      console.log(err); 
    } 
} 
 
getAirportByCode('SVO') 
  .then(console.log) // function(res) {console.log(res)} 
  .catch(alert);

Код работает в последнем chrome.

READ ALSO
Как имитировать клик с помощью ref?

Как имитировать клик с помощью ref?

Как имитировать клик на span UploadНа самом деле нажимаю на кнопку submit, но словно на span

250
Необязательные параметры RewriteRule ЧПУ в .htaccess

Необязательные параметры RewriteRule ЧПУ в .htaccess

Можно ли указывать необязательные параметры RewriteRule при написании ЧПУДопустим есть скрипт с запросом - cats

243
Не могу релизовать поиск на сайте Mysqli php

Не могу релизовать поиск на сайте Mysqli php

При нажатии на поиск выбивает:

244