传递值时的顺序承诺
Sequential Promises whilst passing values
我正在摆弄命运API,我遇到了一点问题。如果我请求一个字符的详细信息,它返回一个对象,但值是ID,然后需要传递到另一个API调用' manifest',它返回该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;
});
这样代码将是平坦的。阅读有关承诺链接的内容。
不知道你推迟第二个请求是什么意思....在此代码中,第二个请求将在第一个请求完成后触发。
相关文章:
- Q 承诺链接以正确的顺序做事
- 控制承诺执行顺序
- 不要在顺序链式承诺中包含 q 承诺结果
- AngularJS中承诺的顺序和时间
- 如何将嵌套承诺与Q连锁?我可以'Don’我不能让它们按正确的顺序运行
- 如何按顺序执行承诺数组
- 使用动态构建的 jQuery 承诺链按顺序激活特定元素
- 承诺回调的触发顺序是什么
- nodeJS中的承诺/承诺中的回调/执行顺序是不对的
- 从数组中按顺序执行一堆 WinJS 承诺
- 从顺序 jQuery ajax 调用返回承诺
- Angular JS:按顺序处理承诺(无链接)
- 承诺链不使用 Q 承诺库按顺序执行
- 如何使用承诺实现顺序异步计算
- AngularJS$q承诺成功的回调以错误的顺序执行
- Javascript承诺以相反的顺序加载
- 承诺的解决顺序是否与Promise.sexel中提到的顺序相同
- 链接HTTP帖子承诺角度不按顺序
- 我如何存储for循环的计数,承诺以任意顺序返回
- 传递值时的顺序承诺