将参数传递给Node.js中的导入函数

时间:2018-07-03 00:01:02

标签: javascript node.js express async.js

我觉得这应该不难,但是我是Node.js的新手(也是JavaScript的许多方面的新手)。我正在创建一个Express应用程序,以返回从多个API获取的自行车位置数组;每个API都需要经度和纬度作为输入。因此,我已将每个API调用分解为一个“模块”,并使用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文件?

3 个答案:

答案 0 :(得分:1)

对于并行方法,每个函数仅具有一个回调参数。

实现所需目标的最简单方法就是这样

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);
});

答案 1 :(得分:1)

a tutorial I found online中,您似乎需要将mobikespin函数包装在其他函数中,以便将数据与{{ 1}}模块。像这样:

async

答案 2 :(得分:0)

您还可以使用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 ]