gpt4 book ai didi

Javascript BlueBird promise : architecture for concurrent API requests

转载 作者:行者123 更新时间:2023-11-28 00:04:25 26 4
gpt4 key购买 nike

我正在寻求架构建议。在 MEAN 环境中使用 Bluebird Promises(这里指的是 Node.js 服务器端),我打算进行许多并发 API 调用,汇总所有结果并响应客户端。示例(伪)代码:

exports.getAllData = function(searchquery, cb) {
var results;

wrapper1.getResultsFromAPI1(searchquery, function(err,data){
results += data;
});

wrapper2.getResultsFromAPI2(searchquery, function(err,data){
results += data;
});

wrapper3.getResultsFromDataBase(searchquery, function(err,data){
results += data;
});

if (AllRequests done){
cb(null,results);
}
}

现在我不知道如何确保:

  1. 同时触发所有请求(不是按顺序来减少响应时间)
  2. 收到所有 API 请求的响应后立即响应客户端
  3. 如果一个 API 请求由于某种原因失败,整个 Promise 链不会被拒绝,从而“丢失”其他 API 响应数据。

我在 Bluebird Promise 网站上检查了合适的集合,但似乎没有一个完全满足上面列出的要求。有什么建议吗?

最佳答案

实现此目的的一种方法是使用 reflect 调用。

var Promise= require('bluebird');

Promise.props({
"wrapper1": someasync(1).reflect(),
"wrapper2": someasync(0).reflect(),
"wrapper3": someasync(1).reflect()
})
.then(function(results) {
Object.keys(results).forEach(function(key) {
if (results[key].isRejected()) {
console.log(key + " failed.", results[key].reason());
} else {
console.log(key + " successed", results[key].value());
}
});
});

function someasync(t) {
if (t===0) return Promise.reject('some err');
else return Promise.resolve(true);
}

结果如下:

wrapper1 successed true
wrapper2 failed. some err
wrapper3 successed true

关于Javascript BlueBird promise : architecture for concurrent API requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492698/

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