質問: JSON.parse(res); }); } response.send("Send successfully"); }); ``` request-promiseは処理に成功したらpromiseを返すのかと思い、`photoInfo.then(res => {console.log(res)})`としたのですが`UnhandledPromiseRejectionWarning`が出てエラーとなってしまいます。 promiseやasync/awaitの使い方を間違えているだけだと思いますが、request-promiseでawaitを使って同期的に処理を記述するやり方にたどり着けていません。 アドバイスを頂けると幸いです。よろしくお願いします。
回答: プロミスチェーン内のどこかで例外が出て(多分rpかJson.parseか)、それを処理できていないというようなエラーかと思います。下記のように、例外をキャッチして、その情報を確認してみてください。 (※回答ではないのですが、コードを示しやすいので。) ``` function getPhotoInfo() { rp(options) .then(res => { // (1)ここでは変数resに取得した画像情報がjson形式で格納される let response = JSON.parse(res); }) // !!追加!! .catch(error => { // promiseのエラーをキャッチします console.log(error); }); } ``` ###### 追記 次のような感じでうまくいきました。~~コメントの部分を見ていただければわかりますが、「プロミス」および「JSONをパースした結果」、その2つをreturnできていなかったのかなと思います。~~ ⇒回答したコードにpromiseとasync/awatiが混在しちゃってたので、直しました。 ただ、エラーに関しては別問題だと思います。 それについてはまた別途、エラー分を質問に乗せたうえでご質問されてみては? ``` const rp = require('request-promise'); const options = { uri: 'https://api.syosetu.com/novelapi/api/?out=json', }; // asyncがいります async function getPhotoInfo() { // awaitします const json = await rp(options); const info = JSON.parse(json); return info; } async function main() { // awaitして画像情報を取得します const photoInfo = await getPhotoInfo(); console.log(photoInfo); } main(); ```