2017-12-07 6 views
0

私はAPIからJSONオブジェクトを取得するためにfetchを使用しようとしていますが、その関数を使用するいずれかの人が直接取得できるようにオブジェクトの最終解決値を返したいそれが返す約束を解決する必要はありません。'fetch'から解決された値を返します

function f() { 
 
    let result = fetch(url, { 
 
     method: 'GET' 
 
    }) 
 
    .then(response => response.json()) 
 
    .then(json => { 
 
     return json 
 
    }).catch(err => { 
 
     // Error 
 
    }); 
 

 
    return result; 
 
}

これが可能であるかない場合、私は本当に知らないが、私は、事前のおかげで助けのために感謝するでしょう。

+2

可能な重複https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) – WilomGfx

+2

非同期コードを同期コードにすることはできません。そのため、最初に約束が存在します。 – nnnnnn

+0

あなたはすでに結果の約束を返しています。まだ利用できないので実際の結果を返すことはできません。ブロックされるので待つことはできません(jhprattの回答は結果を返すために実際には待たずに結果の約束を返す)。約束はなぜ、どのようにここで説明されていますhttps://stackoverflow.com/a/47678417/1641941 – HMR

答えて

1

フェッチすることはできません。これは非同期です。
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

あなたが古いのXMLHttpRequestでそれを行うことができ、それは同期のための特別な引数はhttps://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/openを呼び出しています。私はそれをお勧めしませんが、それはあなたを凍結させます。

+0

いずれかに該当同期とXMLHTTPリクエストを使用するかどうかわからない、あなたはセーラムに取られる可能性があり、これらの日、そのために火あぶりにされ:-)言い換えれば:https://stackoverflow.com/a/47678417/1641941助け – HMR

+0

おかげで、:同期はなぜ、どのように約束することを学ぶために、ちょうど最高の有効なオプションではありません。あなたが正しいと思う私は、非同期を使用して、UIをフリーズするよりも約束を果たす方が良いと思います。 –

1

awaitasyncは、Promiseを自動的に解決し、.then()を何度も繰り返し使用することを避けることができます。

async function f() { 
    let result = (await fetch(url, { 
     method: 'GET' 
    })).json(); 

    return result; 
} 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
+0

関数fは依然としてresult.jsonの約束を返します。したがって、呼び出し側は '.then'を使用する必要があり、' async await'を使用する必要があります。その後、その呼び出し元の呼び出し元はまだ値を得ることはできませんが、約束です。したがって、asyncを使用する場合は、呼び出しスタック全体を非同期にする必要があります(結果、エラー、終了時に気にしない限り)。 – HMR

関連する問題