【发布时间】:2015-07-29 15:08:38
【问题描述】:
我想进行一系列 API 调用,根据存储在数组中的参数值(大约 30-40 个值)更改 URL 中的单个参数值。我正在使用 NodeJS 和 Express。以下是我为此写的一个 sn-p:
var express = require('express');
var router = express.Router();
var rest = require('restler');
router.get('/myroute', function(req, res, next){
parameterArray = [ /* A list of parameter values in here gathered from two more API calls */];
returnArray = [];
for(var i = 0; i < parameterArray.length; i++){
var url = 'https://api.example.org?parameter=' + parameterArray[i];
rest.get(url).on('success', function(data){
// after some processing on data
returnArray.push(processedData);
});
}
res.json(returnArray);
});
module.exports = router;
我有两个问题:
1.) 目前router.get('/myroute') 大约需要 40-50 秒才能完成并返回。我怎样才能让它们更快?我看过node-webworker-threads。有没有更好的选择?
2.) 在上面的代码中,路由函数router.get('/myroute') 返回空的returnArray,因为restler 进行了异步调用。如何确保函数仅在收到所有 API 请求(并将处理后的数据推送到 returnArray)后才返回。
【问题讨论】:
标签: javascript node.js multithreading rest express