代码之家  ›  专栏  ›  技术社区  ›  brianyates

向node.js中导入的函数传递参数

  •  1
  • brianyates  · 技术社区  · 8 年前

    我觉得这不难,但我对node.js(以及javascript的许多方面)还不熟悉。我正在创建一个express应用程序来返回从多个api获取的bike位置数组;每个api都需要经度和纬度作为输入。所以我把每个API调用分解成一个“模块”,我使用NPM库“异步”来并行调用每个调用,并使用“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传递参数时 mobike(1234,1234) )不起作用。如何将lat和lng参数传递到mobike.js文件?

    3 回复  |  直到 8 年前
        1
  •  1
  •   aldo    8 年前

    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);
    });
    
        2
  •  1
  •   RedJandal    8 年前

    对于parallel方法,每个函数只有一个回调参数。

    实现你想要的最简单的方法就是这样

    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);
    });
    
        3
  •  0
  •   curtwphillips    8 年前

    也可以使用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 ]
    
    推荐文章