[英]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);
});
從我在線上找到的教程中 ,您似乎需要將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 ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.