[英]Multiple Async call resolutions using Promises
在Node.js中,我具有Promise.all(array)分辨率,其结果值需要与另一个异步函数调用的结果结合在一起。 我在获取第二个函数的结果时遇到了问题,因为它比promise.all解析得晚。 我可以将其添加到Promise.all,但这会破坏我的算法。 有没有办法使这些值超出其分辨率,以便我可以对其进行静态修改? 我可以创建一个等待结果的容器吗?
更具体地说,我正在从Firebase实时数据库中读取轮询API数据的数据。 我需要对这些数据运行算法并将其存储在MongoDB存档中。 但是归档文件是异步打开的,我无法在结果解析之前打开它(需要编写)。
例:
module.exports = {
news: async function getNews() {
try {
const response = await axios.get('https://cryptopanic.com/api/posts/?auth_token=518dacbc2f54788fcbd9e182521851725a09b4fa&public=true');
//console.log(response.data.results);
var news = [];
response.data.results.forEach((results) => {
news.push(results.title);
news.push(results.published_at);
news.push(results.url);
});
console.log(news);
return news;
} catch (error) {
console.error(error);
}
},
coins: async function resolution() {
await Promise.all(firebasePromise).then((values) => {
//code
return value
}
}
我已经尝试了第一个解决方案,并且它适用于第一个条目,但是我可能在第二次导出时写了异步函数错误,因为它返回未定义。
您可以从getNews
返回一个Promise
module.exports = {
news: function getNews() {
return axios.get('https://cryptopanic.com/api/posts/?auth_token=518dacbc2f54788fcbd9e182521851725a09b4fa&public=true')
.then(res => {
// Do your stuff
return res;
})
}
}
接着
let promiseSlowest = news();
let promiseOther1 = willResolveSoon1();
let promiseOther2 = willResolveSoon2();
let promiseOther3 = willResolveSoon3();
Promise.all([ promiseOther1, promiseOther2, promiseOther3 ]).then([data1,
data2, data3] => {
promiseSlowest.then(lastData => {
// data1, data2, data3, lastData all will be defined here
})
})
这样做的好处是所有诺言将同时启动和运行,因此您的总等待时间将等于promiseSlowest
所花费的时间。
检查链接以了解更多信息: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/async_function#Examples
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.