await は async 関数でのみ有効です 質問する

await は async 関数でのみ有効です 質問する

このコードは次のように書きましたlib/helper.js:

var myfunction = async function(x,y) {
    ....
    return [variableA, variableB]
}
exports.myfunction = myfunction;

次に、別のファイルで使用してみました。

var helper = require('./helper.js');   
var start = function(a,b){
    ....
    const result = await helper.myfunction('test','test');
}
exports.start = start;

エラーが発生しました:

await は async 関数でのみ有効です

どうした?

ベストアンサー1

エラーはmyfunctionではなく を参照していますstart

async function start() {
   ....

   const result = await helper.myfunction('test', 'test');
}

// My function
const myfunction = async function(x, y) {
  return [
    x,
    y,
  ];
}

// Start function
const start = async function(a, b) {
  const result = await myfunction('test', 'test');
  
  console.log(result);
}

// Call start
start();



この質問の機会を利用して、 を使用した既知のアンチパターンについてアドバイスしたいと思いますawaitreturn await


間違っている

async function myfunction() {
  console.log('Inside of myfunction');
}

// Here we wait for the myfunction to finish
// and then returns a promise that'll be waited for aswell
// It's useless to wait the myfunction to finish before to return
// we can simply returns a promise that will be resolved later

// useless async here
async function start() {
  // useless await here
  return await myfunction();
}

// Call start
(async() => {
  console.log('before start');

  await start();
  
  console.log('after start');
})();


正しい

async function myfunction() {
  console.log('Inside of myfunction');
}

// Here we wait for the myfunction to finish
// and then returns a promise that'll be waited for aswell
// It's useless to wait the myfunction to finish before to return
// we can simply returns a promise that will be resolved later

// Also point that we don't use async keyword on the function because
// we can simply returns the promise returned by myfunction
function start() {
  return myfunction();
}

// Call start
(async() => {
  console.log('before start');

  await start();
  
  console.log('after start');
})();


return awaitまた、が正しくて重要な特別なケースがあることを知っておいてください: (try/catch を使用)

`return await` にはパフォーマンス上の懸念がありますか?

おすすめ記事