簡體   English   中英

如何並行運行API調用(Node.js)

[英]How to Run an API Calls in Parallel (Node.js)

我試圖並行運行一些API調用,但是遇到了問題,因為我試圖在返回API數據之前再次調用函數。

我以為我可以在Node中使用new命令,但是不確定如何將其構造到該方案中。 我正在嘗試避免遞歸,因為我已經有一個遞歸版本,並且運行緩慢。

目前,我正在嘗試在服務器上使用此代碼。

loopThroughArray(req, res) { 
  for(let i=0; i<req.map.length; i++) {
    stack[i] = (callback) => {
      let data = getApi(req, res, req.map[i], callback)
    }
  }

  async.parallel(stack, (result) => {
      res.json(result)
  })
}

....

function getApi(req, res, num, cb) {
  request({
    url: 'https://example.com/api/' + num
  },
  (error, response, body) => {
    if(error) {
      // Log error
    } else {
      let i = {
        name: JSON.parse(body)['name'],
        age: '100'
      }
      console.log(body) // Returns empty value array.length > 1 (req.map[i])
      cb(i)
    }
  })

有沒有一種方法可以在每次調用時生成該函數的新實例,並累積結果以將其作為一個結果發送回客戶端?

這是一個使用Async庫調用Web API(每個都有不同參數)的示例,我們首先創建N個函數變量的數組。

const async = require('async');
const request = require('request');

//Set whatever request options you like, see: https://github.com/request/request#requestoptions-callback
var requestArray = [
    {url: 'https://httpbin.org/get'},
    {url: 'https://httpbin.org/ip'}
];

let getApi = function (opt, callback) {
    request(opt, (err, response, body) => {
        callback(err, JSON.parse(body));
    });
};

const functionArray = requestArray.map((opt) => { 
    return (callback) => getApi(opt, callback); 
});

async.parallel(
    functionArray, (err, results) => {
        if (err) {
            console.error('Error: ', err);
        } else {
            console.log('Results: ', results.length, results);
        }
});

您可以輕松切換Url和Query值以匹配所需的內容。 我在這里使用HttpBin,因為它很好地用於說明目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM