我使用NodeJS爲API構建了一個SDK,可以找到它here。我的問題是,當用戶聲明模塊時,它會提供我需要驗證的用戶名和密碼以及必須用於將來調用的令牌。所以,這個令牌存儲在irecarga.token中,並且對於每個將來的呼叫,我都必須使用它來識別用戶。我的問題是,如果用戶在聲明後直接調用另一個函數,聲明可能無法及時完成(因爲它執行HTTP POST),並且屬性標記將爲空。NodeJS上的阻塞函數
// module declaration which requires a HTTP call and updates irecarga.token
var irecarga = require('../')({
username: process.env.IRECARGA_USERNAME,
password: process.env.IRECARGA_PASSWORD
})
// function called straight after declaration which uses irecarga.token
irecarga.getServiceProviders(48, function(err, data){
// this code won't even run because the token = null will break the code
console.log('err: ', err)
console.log('data', data)
})
於是,我看到了很多的解決方案與節點創建阻塞功能,我可以利用回調或將需要發送我想執行的參數等功能功能等模塊。
這些解決方案很可能會工作,但代碼會變得醜陋和混亂。此外,我不認爲我在創新,事實上,這是我看到像微軟和谷歌這樣的大公司宣佈他們的API密鑰的方式。
我在這裏錯過了什麼嗎?有什麼我可以添加驗證功能,使任何方法的iRecarga等待,直到驗證完成?
你爲什麼不使用承諾。 如果你不希望它是異步的,那就使用像wait.for這樣的庫,這會讓你的代碼執行順序。但是我更願意在任何一天使用promise。 – maddygoround
看看這個:http://stackoverflow.com/questions/20315434/node-js-asynchronous-module-loading 答案描述了幾個偉大的模式。最終,你將不得不使用其中的一個,沒有辦法避免回調(或承諾如上述評論建議)。但是,它並不一定要讓你的代碼混亂,我不認爲。 –
爲什麼您需要在設置變量時發出發佈請求? – Orlando