Javascript 将参数传递给Node.js中导入的函数
我觉得这应该不难,但我对Node.js是新手(对JavaScript的许多方面也是新手)。我正在创建一个Express应用程序来返回从多个API获取的自行车位置数组;每个API都需要经度和纬度作为输入。因此,我将每个API调用分解为一个“模块”,并使用npm库“异步”来并行执行每个调用,使用“axios”来执行API请求。我可以让它工作得很好,而不需要将它分解成模块,但是一旦我将每个API调用分离到它自己的文件中,我就不知道如何将lat和lng传递到它 这是我的index.jsJavascript 将参数传递给Node.js中导入的函数,javascript,node.js,express,async.js,Javascript,Node.js,Express,Async.js,我觉得这应该不难,但我对Node.js是新手(对JavaScript的许多方面也是新手)。我正在创建一个Express应用程序来返回从多个API获取的自行车位置数组;每个API都需要经度和纬度作为输入。因此,我将每个API调用分解为一个“模块”,并使用npm库“异步”来并行执行每个调用,使用“axios”来执行API请求。我可以让它工作得很好,而不需要将它分解成模块,但是一旦我将每个API调用分离到它自己的文件中,我就不知道如何将lat和lng传递到它 这是我的index.js import a
import async from 'async';
import {mobike} from './mobike.js';
import {spin} from './spin.js';
async.parallel([
mobike, //How or where can I pass these parameters?
spin
],
function(err, results) {
console.log(results);
});
例如,这里是我的mobike.js模块(为了简洁起见,我将省略spin.js)
当我尝试通过mobike传递参数时(比如
mobike(12341234)
),它不起作用。如何将lat和lng参数传递给mobike.js文件?对于并行方法,每个函数只有一个回调参数
实现你想要的最简单的方法就是这样
async.parallel([
function (callback) {
var lng = 0.0
var lat = 0.0
mobike(lat, lng, callback), //This is where you pass in parameters
},
spin
],
function(err, results) {
console.log(results);
});
从中,似乎需要将mobike
和spin
函数包装到其他函数中,以便与async
模块提供的回调函数一起绑定数据。大概是这样的:
var lat = 35.2286324;
var lng = -80.8427562;
async.parallel([
function(callback) { mobike(lat, lng, callback); },
function(callback) { spin(lat, lng, callback); },
],
function(err, results) {
console.log(results);
});
也可以使用绑定来传递参数。例如:
const async = require('async')
const sleep = (ms = 0) => {
return new Promise(resolve => setTimeout(resolve, ms))
}
async.parallel([
mobike.bind(null, 1000), //How or where can I pass these parameters?
spin.bind(null, 500)
],
function(err, results) {
console.log(results);
})
async function mobike (ms) {
await sleep(ms) // pretend to wait for an api request
console.log('mobike waited for ' + ms + ' ms')
return ms
}
async function spin (ms) {
await sleep(ms) // pretend to wait for an api request
console.log('spin waited for ' + ms + ' ms')
return ms
}
结果:
spin waited for 500 ms
mobike waited for 1000 ms
[ 1000, 500 ]
我将Aldo的回答标记为正确,因为这是第一个回答,但感谢您的回答(同样有效),您还可以将
异步
函数转换为返回承诺
,并使用承诺。所有
函数的所有输出都能获得相同的结果。感谢@BrijeshPatel…如果我这样做,我不再需要async.js
依赖项,对吗?
spin waited for 500 ms
mobike waited for 1000 ms
[ 1000, 500 ]