Мои переменные ожидания в моей асинхронной функции не выполняются построчно - PullRequest
0 голосов
/ 09 января 2019

У меня есть две переменные, которые ожидают функции. Я просто пытаюсь консоль войти их после того, как они сделаны, однако я получаю неопределенный для них обоих, поскольку он пропускает мимо.

Журнал консоли, который происходит после того, как функции await выполняются первыми. Затем функции завершаются через несколько секунд.

async onSubmit(event) {
   event.preventDefault();

   const coverImage = await ipfs.files.add(this.state.buffer, (error, result) =>{
   if(error){
    console.error(error)
    return
   }

  console.log('Here is: ', result[0].hash)
  //Return the hash value
  return result[0].hash
  })

  const contents = await ipfs.files.add(this.state.contentBuffer, (error, result) =>{
  if(error){
    console.error(error)
    return
  }

  console.log('Here is: ', result[0].hash)
  //Return the hash value
  return result[0].hash
  })

  let answer ={thePic: coverImage, theContents: contents}

  console.log(answer)   //This shows as {thePic: undefined, theContents: 
  //undefined}

}

Я ожидал бы, что журнал консоли после coverImage и theContents закончен, но это происходит сразу.

1 Ответ

0 голосов
/ 09 января 2019

https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add

"Если обратный вызов не передан, возвращается обещание."

await имеет смысл, только если вы вызываете функцию, которая возвращает обещание. Если вы измените свой код для продолжения в асинхронной функции после асинхронного вызова, возвращаемое значение должно быть результатом, который вы ищете, и должно происходить в ожидаемом порядке.

const imageResult = await ipfs.files.add(this.state.buffer);
const coverImage = imageResult[0].hash;

Если вы хотите обработать ошибки, оберните весь набор ожидаемых вызовов в try / catch; ошибка будет вызвана ошибкой любого из промежуточных обещаний.

...