繁体   English   中英

Javascript回调 - 如何返回结果?

[英]Javascript callback - how to return the result?

我正在努力完全理解回调,我在最后的障碍中磕磕绊绊。

在JS中我调用一个函数,然后使用dojo rpc Json服务调用PHP函数。 我已经逐步完成了firebug中的函数并且PHP正在执行并通过回调返回正确的响应,但我不知道如何将值返回到调用JS函数的初始JS变量? 例如

JS Function 1

Function one(){

Var test = getPhp(number);

}

function getPhp(number)
{

this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');

    var result = serviceBroker.phpFunc(number);

    result.addCallback(
        function (response)
        {
            if (response.result == 'success')
            {
                return response.description;
               //I am trying to pass this value back to the 
               //var test value in   function one

            }
        }
    );
}

基本上我现在需要将response.description传递回函数1中的var test变量。

任何帮助表示赞赏

这是不可能的,因为回调是异步运行的。 这意味着getPhp函数在执行回调之前返回(这是回调的定义,也是异步编程很难的原因之一;-))。

您要做的是创建一个使用test变量的新方法。 执行回调时需要调用此方法。

function one(result) {
  var test = result;
  // Do anything you like
}

function getPhp(number, callback) {
  this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');
  result.addCallback(
    function (response)
    {
        if (response.result == 'success')
        {
           callback(response.description);
        }
    }
  );
}

getPhp(number, function(result) { one(result); });

最后一个方法创建一个传递给getPhp函数的“匿名函数”。 该函数在响应到达时执行。 这样,您可以在数据到达后将数据传递给one(number)函数。

简短的回答是,你做不到。

对回调中的数据或从回调调用的函数执行任何操作。 你不能从它返回任何东西。

一个更清洁的答案:

getPhp(number);

function one(data){
    var test = data;
    // do what you want
}

function getPhp(number)
{

    this.serviceBroker = new dojo.rpc.JsonService(baseUrl + '/index/json-rpc/');

    var result = serviceBroker.phpFunc(number);

    result.addCallback(
        function (response)
        {
            if (response.result == 'success')
            {
                one(response.description);
            }
        }
    );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM