2014-01-07 2 views
0

Я реализую freeswitch ESL с помощью nodejs, для которого я использую модуль modesl, он отлично работает, и я могу вызвать инструменты dialplan с помощью функции execute.freeswitch esl using node js

Однако функция execute является асинхронной реализацией в модуле model nodejs.

Мне нужен синхронный вызов, так что, когда я вызываю функцию execute, выполнение должно ждать, пока freeswitch не завершит выполнение этого приложения.

В приведенном ниже примере кода я получаю вывод «ivr finished» до завершения воспроизведения.

exports.process_ivr = function (conn, id) 
{ 
    conn.execute('answer'); 
    conn.execute('playback','/root/before.wav'); 
    console.log('ivr finished'); 
}; 

По modesl нет асинхронного способа вызова команд FreeSwitch, есть ли другой способ осуществить это с помощью nodejs?

+0

node.js использует 1 поток, поэтому синхронная функция будет делать «режимы» обслуживать 1 клиент за раз? Я думаю, что вы можете определить, завершено ли выполнение посредством callback 'conn.execute ('воспроизведение', '/ root/before.wav', function() {console.log ('ivr finished')})'; – damphat

+0

, который не помог, он просто регистрируется в конце вызова. Предположим, что я посылаю 4 команды воспроизведения один за другим, тогда все эти команды поставлены в очередь ESL. Идеальный случай - использовать play_and_get_digits и обрабатывать разные ответы на значение dtmf. – user2982115

+0

Но вы можете проверить dtmf, а затем вызвать следующий 'execute' в обратном вызове, тогда у нас есть обратный вызов внутри обратного вызова. Ну, это трудно читать :), но это асинхронно. – damphat

ответ

1

Попробуйте это.

conn.execute('answer',function(){ 
    conn.execute('playback','/root/before.wav',function(){ 
     console.log('ivr finished'); 
    }); 
}); 
Смежные вопросы