传递值时的顺序承诺

Sequential Promises whilst passing values

本文关键字:顺序 承诺      更新时间:2023-09-26

我正在摆弄命运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;
});

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

不知道你推迟第二个请求是什么意思....在此代码中,第二个请求将在第一个请求完成后触发。