顺序承诺,同时传递价值

我正在玩命运API,我遇到了一些问题。 如果我请求一个字符的详细信息,它会返回一个对象,但是这些值是ID,然后需要将其传递给另一个API调用“清单”,该清单返回该ID的对象。

我正在使用'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; }); }); 

我需要一种方法来阻止第二个请求,直到第一个请求返回,然后将返回值传递给第二个请求。

谢谢

不要嵌套呼叫,你可以链接你的承诺 ,如下所示:

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

如果您需要将一些数据从第一个成功处理程序传递到第二个成功处理程序,那么返回一个Promise.all() ,将您的第二个request传递给一个数组以及您想要发送的任何数据。 例如,

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

如果您不想嵌套呼叫,则可以返回请求承诺并以平面样式继续。

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

这样的代码将是平坦的。 阅读关于承诺链接。

不知道你是什么意思,通过拒绝第二个请求….在这个代码中,第二个请求将在第一个完成之后触发。