Nodejs обещают, что async / await не работает должным образом - PullRequest
0 голосов
/ 04 апреля 2019

Не получен ответ API 3500 записей в методе обещания.Если я вызываю api с помощью setTimeout (), он работает и получает все данные.

Ниже приведен пример кода (вызов apiCall только в асинхронном методе)

let data = await apiCall();

function apiCall(){
   return new Promise((resolve,reject)=>{
      let options = {method:'get'}
      fetch('http://example.com/getData',options).then(data => {
         resolve(data);
      });
   });
}

Ответы [ 2 ]

1 голос
/ 04 апреля 2019
let data = await apiCall();

function apiCall(){
   let options = {method:'get'};
   return fetch('http://example.com/getData', options);
}

попробуй вот так и все должно работать нормально.

0 голосов
/ 04 апреля 2019

Эта строка здесь, let data = await apiCall();, недопустима, если вы не вызываете внутри async функцию, потому что await действительна только внутри async функции.

Правильный синтаксис для использования async/await is:

async function myFunc() {
  let result = await getSomething()
  ...
}

Также fetch API поддерживает Promise, поэтому в вашем коде вы можете сделать:

// note async keyword
async function apiCall(){
  let options = {method:'get'}
  try {
    let response = await fetch('http://example.com/getData',options) // response is also a promise so
    let data = await response.json(); // data contains the result
    console.log(data);
  } catch (err) {
    console.error(err)
  }
}

Скажите, если вы введете return data в своем apiCall функция, то результат также обернут в promise функцией async.Так что вам придется:

apiCall().then(result => console.log(result)).И снова async/await использование выше ^

...