将参数传递给 Node.js 中的导入函数
Passing parameters to imported function in Node.js
我觉得这应该不难,但我是 Node.js 的新手(也是 JavaScript 的许多方面的新手)。我正在为从多个 API 中获取的 return 自行车位置数组创建一个 Express 应用程序;每个 API 需要经度和纬度作为输入。所以我将每个 API 调用分解为 'module' 并且我正在使用 npm 库 'async' 并行进行每个调用,并使用 'axios' 进行 API 请求。我可以让它正常工作而无需将其分解成模块,但是一旦我将每个 API 调用分离到它自己的文件中,我就无法弄清楚如何将 lat 和 lng 传递给它。
这是我的index.js
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)
import axios from 'axios';
export var mobike = function (lat, lng, callback){
axios.get('https://mwx.mobike.com/mobike-api/rent/nearbyBikesInfo.do', {
params: {
latitude: lat, //35.2286324
longitude: lng //-80.8427562
},
headers: {
'content-type': 'application/x-www-form-urlencoded',
'user-agent': 'Mozilla/5.0'
}
}).then( response => {
callback(null, response.data.object)
}).catch(error => {
callback(error, null)
})
}
当我尝试通过摩拜单车传递参数时(例如mobike(1234,1234)
),它不起作用。如何将 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);
});
从 a tutorial I found online 开始,您似乎需要将 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);
});
你也可以使用bind来传递参数。示例:
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 ]
我觉得这应该不难,但我是 Node.js 的新手(也是 JavaScript 的许多方面的新手)。我正在为从多个 API 中获取的 return 自行车位置数组创建一个 Express 应用程序;每个 API 需要经度和纬度作为输入。所以我将每个 API 调用分解为 'module' 并且我正在使用 npm 库 'async' 并行进行每个调用,并使用 'axios' 进行 API 请求。我可以让它正常工作而无需将其分解成模块,但是一旦我将每个 API 调用分离到它自己的文件中,我就无法弄清楚如何将 lat 和 lng 传递给它。
这是我的index.js
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)
import axios from 'axios';
export var mobike = function (lat, lng, callback){
axios.get('https://mwx.mobike.com/mobike-api/rent/nearbyBikesInfo.do', {
params: {
latitude: lat, //35.2286324
longitude: lng //-80.8427562
},
headers: {
'content-type': 'application/x-www-form-urlencoded',
'user-agent': 'Mozilla/5.0'
}
}).then( response => {
callback(null, response.data.object)
}).catch(error => {
callback(error, null)
})
}
当我尝试通过摩拜单车传递参数时(例如mobike(1234,1234)
),它不起作用。如何将 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);
});
从 a tutorial I found online 开始,您似乎需要将 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);
});
你也可以使用bind来传递参数。示例:
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 ]