Я создаю SDK для API с помощью NodeJS, который можно найти 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)
})
Итак, я увидел множество решений для создания блокирующих функций с узлом, я мог бы использовать обратные вызовы или другие модули, которые потребовались бы для отправки функции, которые я хочу, чтобы выполнить в качестве параметра для других функций.
Эти решения, скорее всего, будут работать, но код будет уродливым и беспорядочным. Кроме того, я не думаю, что я новаюсь, на самом деле так я видел, как крупные компании, такие как Microsoft и Google, объявляли свои ключи API.
Я что-то упустил? Есть ли что-нибудь, что я мог бы добавить внутри функции проверки, которая заставит любой метод iRecarga ждать, пока не будет выполнена проверка?
Почему бы вам не использовать обещание. Если вы не хотите, чтобы он был асинхронным, используйте библиотеку, например wait.for, которая делает ваш код последовательным. Но я предпочел бы использовать обещание в любой день. – maddygoround
Взгляните на это: http://stackoverflow.com/questions/20315434/node-js-asynchronous-module-loading Ответ описывает несколько отличных шаблонов. В конечном итоге вам придется использовать один из них, чтобы избежать обратного вызова (или обещания, как указано выше). Но не обязательно, чтобы ваш код был грязным, я не думаю. –
почему вам нужно сделать запрос на отправку при настройке переменных? – Orlando