簡體   English   中英

將參數傳遞給Node.js中的導入函數

[英]Passing parameters to imported function in Node.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傳遞參數時(例如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);
});

我在線上找到的教程中 ,您似乎需要將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 ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM