1. ホーム
  2. javascript

[解決済み] Syntax error : await is only valid in async function を解決するにはどうすればよいですか?

2022-01-30 03:03:35

質問

プロミスを使った非同期呼び出しから、あるデータを返すコードを書きました。実行しようとすると、"Syntax Error await is only valid in async function"となり、Cannot proxy application requests...Error: connect ECONNREFUSEDとなりました。

なぜこのようなエラーが発生するのか、よくわかりません。

関数呼び出しの前にasyncを使ってみたが、うまくいかなかった

var http = require('https');
var httpGet = function(url) {
  return new Promise (function(resolve, reject) {
    http.get(url,function(res) {
      res.setEncoding('utf8');
      var body = ''; 
      res.on('data', function(chunk){ 
        body += chunk;
        console.log("The body is "+ body);
      });
      res.on('end',function(){resolve(body);});
    }).on('error', reject);
  });
};

var body = await httpGet('link');
$.response.setBody(body);

httpGet関数から返されたデータを変数bodyに持たせたいのですが。今現在、私は上記のようなエラーを受け取っています。しかし、awaitを使用せずに、私は'{}'としてbodyの値を取得します。

お願いします

解決方法を教えてください。

await とマークされた関数の中でしか呼び出すことができません。 async . を作るので async IIFE を呼び出して httpGet を追加しました。

(async function(){
    var body = await httpGet('link');
    $.response.setBody(body);
})()

基本的には、1つの asynchronous の操作で、フロー全体も非同期にする必要があります。そのため async キーワードはES6ジェネレータ関数を使うようなもので、プロミスを返すようにします。

を確認することができます。 これ をご覧ください。