现在手上有个项目,数据均为通过http查询第三方再返回给客户端。
其中有两个产品查询的API,对方文档建议通过如下方式调用:
1、並行发起两个或以上查询;
2、当获取到status=complete或超出3秒终止查询。
实际上现在测试出结果如下:
第一次请求----500ms,返回结果空,status=in-process
第二次请求----900ms,返回结果空,status=in-process
.....
第五次请求----3000ms,返回10条数据,status=complete
想咨询,
如何通过webman如何能同时发出2个并行请求,并且需要限制总请求时间,还有需要把結果返回给前端?
nodeJs下我想到的方法如下:
const getList = (keyword) => {
retrun new Promise(resolve => {
fetch(`/resource-list/${keyword}`).then(res => {
if(res.status === 'complete'){
resolve(res)
}else{
setTimeout(async () => {
resolve(await getList(keyword))
},250)
}
})
})
}
const race = Promise.race([
getList('aaa'),
getList('aaa'),
new Promise((resolve,reject) => {
setTimeout(() => reject(new Error('request timeout')),3000)
})
])
2、另外想咨询下,如果部分数据为第三方提供,部分数据为数据库查询,大家有好的方法进行数据汇聚吗?(主要考虑分页问题)
问题一已经解决了。暂时使用nodeJs代理请求,
nodeJs处理第三方api查询,类似上面的伪代码,限制了3s内必定返回或返回部分查询结果。
整体流程大概是:client -> webman(curl) -> nodeJs(local) -> API;
论坛上也找到了一些相关的,如通过webman的process自定义进程进行查询或者通过swoole驱动,或通过reactPHP来达到目的,但由于对以上不熟悉,不知道是否可以类似nodeJs这样去弄,所以放弃了。
问题二:暂时还是想不到什么好的解决方案。