2017-12-05 4 views
0

これは動作します:非同期/のawait:関数の配列の値にアクセスすることはできません直接

var getArray = function(id) { 
 
    return [1, 2]; 
 
} 
 

 
console.log(getArray()[0]); // returns 1

これは動作しません:

var getArray = async function(id) { 
 
    return [1, 2]; 
 
} 
 

 
console.log(await getArray()[0]); // syntax error

どうして? async/awaitの構文を変更するにはどうすればよいですか?

+0

あなたの関数内try/catchを使用することができますあなたは、 ''非同期function'のawait'外を使用することはできません。どこでも 'getArray'を呼び出すと、' async'と同じようになります。 – Bergi

答えて

1

別のasync機能でawaitキーワードを使用して、 - (await getArray())[0]で目的の結果を得ることができます。

async関数を別のasync関数内に使用しない場合は、thenを呼び出す簡単なPromise関数のように使用する必要があります。

var getArray = async function(id) { 
 
    return [1,2]; 
 
} 
 

 
getArray().then(res => console.log(res[0])).catch(err => {/* ... */});

あなたがawaitを使用したい場合は、そこにロジックを行いますと、ちょうどと呼ばれる別のラッパーasync機能を必要としています。また、あなたが

var getArray = async function(id) { 
 
    return [1,2]; 
 
} 
 

 
async function printFirst() { 
 
    try { 
 
    const first = (await getArray())[0]; 
 
    console.log(first); 
 
    } catch(e) { 
 
    
 
    } 
 
} 
 

 
printFirst();

+0

私はasync/awaitを使用したい、そうではありません。 – Kinesias

+0

更新された答えを見てください。また、その答えを注意深く読んでください。私はあなたが 'await'を使うことができる場所を書いています –

+0

@SurenSrapyan' .catch'セットがない場合は、キャッチされていないエラーに関するメモを追加するべきです。 – RyanZim

関連する問題