将参数传递给 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 开始,您似乎需要将 mobikespin 函数包装在其他函数中,以便将您的数据与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 ]