2016-10-20 9 views
1

私はdestiny APIを使いこなしていますが、少し問題があります。文字の詳細を要求するとオブジェクトが返されますが、値はIDであり、そのIDのオブジェクトを返す 'マニフェスト'への別のAPI呼び出しに渡す必要があります。値渡し中のシーケンシャル約束

「request-promise」を使用してAPI呼び出しを行っていますが、それは私が気に入らない呼び出しをネストする必要があることを意味します。

最初のリクエストのデータの一部を残し、最後にもう一度データを取得する必要があります。

例:

request('destiny-character-api') 
.then(character => { 
    // Keep some of the data from character, eg className 
    request(`destiny-manifest-api/${character.item}`) 
    .then(item => { 
     // Overwrite character.item with the value of item.name 
     return item; 
    }); 
}); 

私は最初のものが返されるまで、第2の要求をオフに保持し、その後、第2の要求に返された値を渡す方法が必要です。そのような

+0

この状況では入れ子には何も問題はありません。それは完全に有効な解決策です(外のコールバックで忘れた 'return'を除いて) – Bergi

答えて

1

代わりに、ネスト呼び出しの

おかげで、あなたは可能性がchain your promises、:

request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}) 
.then(item => { 
    return item; 
}); 

あなたがPromise.all()を返し、その後、第二に最初の成功ハンドラからのいくつかのデータを渡す必要がある場合、 2番目のrequestの配列を、送信したいデータと共に渡します。例:

request('destiny-character-api') 
.then(character => { 
    return Promise.all([ 
     request(`destiny-manifest-api/${character.item}`), 
     character.className 
    ]); 
}) 
.then(([item, className]) => { 
    item.name = className; 
}); 
+0

こんにちは、応答のおかげで、私は実際に最初の要求のデータ。私はおそらく質問でそれを指定する必要があります...今編集する – abbott567

+0

@ abbott567ああ、クールです。私は私の答えも更新しました。 –

+0

驚くばかり!それは私が探していたものです!ありがとう – abbott567

0

コールをネストしない場合は、約束を返すことができ、フラットスタイルで続けることができます。

return request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}).then(item => { 
    return item; 
}); 

このようにコードはフラットになります。約束の連鎖について読む。

このコードでは、2番目のリクエストを延期することによって何を意味するのか分かりません。このコードでは、2番目のリクエストは最初のリクエストが完了した後に起動します。

関連する問題