【问题标题】:pushing data to an array from an async function in nodeJS从nodeJS中的异步函数将数据推送到数组
【发布时间】:2020-12-19 20:53:32
【问题描述】:

我想将对象存储到数组中。我正在使用一个名为 finnhub 的包来搜索数据,现在我正在将空信息推送到数组中,并且需要异步等待的帮助(我认为)以使其正常工作。这是我的代码:

router.get("/execute", 异步函数(req, res){

let positions = [];


try {
    
    let unixTimestamp = new Date();
    let today = parseInt((new Date(unixTimestamp).getTime()/1000).toFixed(0));
    let twoDays = today - (2 * 86400);
    let ignites = [];
    
    
    for(const stock of stocks) {
        
        finnhubClient.stockCandles(stock, "1", twoDays, today, {}, async (error, data, response)  => {
            try {
                let info = await data;
                
                let total = 0;
                for(let i = 0; i < info.h.length; i++) {
                    let barPriceChange = await parseFloat((info.h[i] - info.l[i]));
                    total += barPriceChange;
                }
                let ignite = await {symbol: stock, avgBar: total/info.h.length};
                
                ignites.push(ignite);
                

            } catch(err) {
                console.log("ERROR", err.message);
            }
        });
            
    }
    console.log(ignites);
    

    
} catch(err) {
    console.log("ERROR", err.message)
}

});

【问题讨论】:

  • 你为什么要做await dataawait parseFloatawait {}

标签: node.js asynchronous async-await


【解决方案1】:

你需要创建一个 Promise 函数并执行它:

const executeAsync = async (stock, twoDays, today) => new Promise((res, rej) => {
    finnhubClient.stockCandles(stock, "1", twoDays, today, {}, async (error, data, response)  => {
        try {
            let info = data;

            let total = 0;
            for(let i = 0; i < info.h.length; i++) {
                let barPriceChange = await parseFloat((info.h[i] - info.l[i]));
                total += barPriceChange;
            }
            let ignite = await {symbol: stock, avgBar: total/info.h.length};

            res(ignite);
        } catch(err) {
            rej(err.message);
        }
    });
});
        
然后使用它:
let unixTimestamp = new Date();
let today = parseInt((new Date(unixTimestamp).getTime()/1000).toFixed(0));
let twoDays = today - (2 * 86400);
let ignites = [];


for(const stock of stocks) {
   const response = await executeAsync(stock, twoDays, today);
   ignites.push(response)
}

【讨论】:

  • 第一次收到 SyntaxError: Unexpected token 'return'.
  • 删除了退货并且它起作用了,你知道这意味着什么吗,我担心这个应用程序的未来发展以及它会如何受到影响。有什么地方可以指导我吗?
  • 你说得对,return我写错了,它的函数表达式不需要return。无论如何,它是一个承诺,请阅读它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多