我使用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