我正在使用milewise的 node-soap 客户端(顺便创建 API),但是我很难将回调的结果放到正确的范围内。
这是我现在拥有的代码:
function generateSoapRequest(req, res, next)
{
soap.createClient('http://127.0.0.1:' + cfg.service_port + cfg.service_url_path,
function(err, client) {
client.CXIf.CXIf.CXProcessXML(
{"XMLRequestData": {"CXLogon": {"UserID":"1901007", "Password":"2580", "LogonType":11 } } },
function(err, result, body) {
if (err) {
console.log(err);
return;
}
console.log(result);
var cxresponse = result.XMLResponse[0].CXResponse;
console.log('SessionID:' + cxresponse.SessionID + ' SessionInstanceID:' + cxresponse.SessionInstanceID);
});
});
}
function getVoiceMailInformation(req, res, next) {
var cxresponse = generateSoapRequest(req, res, next);
var something = doSomethingNext(cxresponse);
}
function doSomethingNext(cxresponse){....; return something;}
基本上,当我启动getVoiceMailInformation() 时,它会创建一个soap 客户端并通过generateSoapRequest() 请求一些信息。下一步是获取该函数的结果(在上面的代码中没有实现,因为我不知道如何)并做其他事情。
我的问题是soap.createClient 是异步的,所以函数完成后回调会很好地触发。
最好的方法是什么?(也许这是一些微不足道的事情,但是 javascript 中匿名函数的范围是让我很生气的东西。)
任何帮助将不胜感激。