Проблема асинхронной инициализации node.js - PullRequest
0 голосов
/ 03 августа 2011

Я создаю модуль node.js, который связывается с программой через XML-RPC.API для этой программы изменился недавно после определенной версии.По этой причине, когда клиент создается (createClient), я хочу спросить у программы его версию ( через XML-RPC ) и основывать свои определения API на этом.

ПроблемаЭто связано с тем, что, поскольку я выполняю вышеизложенное асинхронно, существует вероятность того, что работа не была завершена до того, как клиент фактически будет использован.Другими словами:

var client = program.createClient();
client.doSomething();

doSomething() потерпит неудачу, потому что определения API не были заданы, я думаю, что HTTP-RPC-ответ HTTP не был возвращен из программы.некоторые способы исправить это?Я хочу иметь возможность иметь переменную с именем client и работать с ней, так как позже я буду вызывать методы для ее получения (которая будет возвращена с помощью обратного вызова).

1 Ответ

4 голосов
/ 03 августа 2011

Настройте его следующим образом:

program.createClient(function (client) {
  client.doSomething()
})

Каждый раз, когда происходит IO, он должен быть асинхронным.Другой подход к этому может быть с обещанием / будущим / сопрограммным типом, но лучше всего научиться любить обратный вызов :))

...