gpt4 book ai didi

javascript - 一旦父 http 请求中的所有子 http 请求完成,我如何返回

转载 作者:行者123 更新时间:2023-11-29 15:26:36 25 4
gpt4 key购买 nike

我正在访问一个 API,该 API 会返回游戏中击杀的所有详细信息,第一个端点会返回击杀事件的 ID,然后会击中第二个端点以检索 killer 和被击杀的名称。

由于此 API 的设置方式,我需要发出请求以首先获取事件 ID,然后等待返回数组中的所有 ID 获取结果,然后处理整个 kill 数组:

    requestify.get(url).then(function (response) {
var events = [];
if (response.body && response.body.length > 0) {
data = JSON.parse(response.body);
if (data.hasOwnProperty('events')) {
events = data.events.map(function(event) {
return this.getDataForHeroKillId(event.id, function(killInfo) {
return { killer: killInfo.killer, killed: killInfo.killed, timestamp: event.time };
});
}.bind(this));
console.log('events is: ', events);
}
}
return Promise.all(events);
}.bind(this));

我的 getKillInformation 函数如下所示:

KillFeed.prototype.getKillInformation = function(id, cb) {
var data = null;
requestify.get(url).then(function (response) {
var event = {};
if (response.body && response.body.length > 0) {
data = JSON.parse(response.body);
if (data.hasOwnProperty('Killer')) {
event = { killer: data.Killer, killed: data.Killed};
}
}
cb(event);
});
};

在第二种方法中,我希望我可以回调每个子请求的结果,然后一旦它们全部执行完毕,我的新数组就会保存数据。但是由于 JS 的事件驱动特性,我发现我的代码块继续返回一个空事件数组,因为这段代码显然是非阻塞的(可以理解,在发出 HTTP 请求时阻塞事件队列并不理想)。我该如何实现?

最佳答案

一个使用promises为此。

requestify.get(url).then(function (response) {
var events = [];

if (response.body && response.body.length > 0) {
var data = JSON.parse(response.body);
if (data.hasOwnProperty('events')) {
// Trying to process the kill information here
events = data.events.map(function(event) {
return this.getKillInformation(event.id).then(function(killInfo) {
return { killer: killInfo.killer, killed: killInfo.killed, timestamp: event['time1'] };
});
}.bind(this));
}
}

return Promise.all(events);
});

KillFeed.prototype.getKillInformation = function(id) {
var url = 'internal_url';
return requestify.get(url).then(function (response) {
if (response.body && response.body.length > 0) {
var data = JSON.parse(response.body);
if (data.hasOwnProperty('killer')) {
return { killer: data.Killer, killed: data.Killed };
}
}
});
};

关于javascript - 一旦父 http 请求中的所有子 http 请求完成,我如何返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38699776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com