繁体   English   中英

使用Promises的多种异步呼叫解决方案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM