Javascript:为啥不能在回调函数中获取变量?

Posted

技术标签:

【中文标题】Javascript:为啥不能在回调函数中获取变量?【英文标题】:Javascript: Why can not get variable in callback function?Javascript:为什么不能在回调函数中获取变量? 【发布时间】:2018-10-18 06:40:33 【问题描述】:

我已经阅读了几个不同的callback 函数文档,但不幸的是无法成功获得相关的variable。我在这里缺少什么?

checkNo: function (callback) 
    var comboQuery = Ext.ComponentQuery.query('[name=foocombo]')[0].getSelectedRecord();
    var chkno = comboQuery.get('mychkno'); //Success to get this integer value

    callback(chkno); //Error raises here. Debugger says "callback is not a function"
    //if (callback) callback(chkno); //I've tried to check callback but did not work as well.
,

setFooCombo: function () 
    var me = this;
    var fooStore = Ext.getStore('fooComboStore');
    var chkno = ''; //Trying to pass an empty value. Not sure if correct approach 
    var checkno = me.checkNo(chkno); //Trying to get returned value from above function to be able using on url.

    fooStore.getProxy().setUrl(MyApp.Url() + '/foo/list?=' + checkno); //I need pass value that return from callback to here
    if (typeof checkno === MyApp.NUMBER) 
        fooStore.load();
    


    // I've tried another way to set new URL as below but did not work too.
    // me.checkNo(function (checkno) 
    //fooStore.getProxy().setUrl(MyApp.Url() + '/foo/list?=' + checkno);
    //     if (typeof checkno === MyApp.NUMBER) 
    //         fooStore.load();
    //     
    // );
,

更新:在 Rahul Khandelwal 的回答重构了函数之后,当然现在可以工作了。

checkNo: function () 
    var comboQuery = Ext.ComponentQuery.query('[name=foocombo]')[0].getSelectedRecord();
    var chkno = comboQuery.get('checkno');

    return chkno;

,

setFooCombo: function () 
    var me = this;
    var fooStore = Ext.getStore('fooComboStore');
    var checkno = me.checkNo();

    fooStore.getProxy().setUrl(MyApp.Url() + '/foo/list?=' + checkno);
    if (typeof checkno === MyApp.NUMBER) 
        fooStore.load();
    
,

【问题讨论】:

你没有传递函数。 另外,chkno 定义在 setFooCombo 而不是 checkNo - 它不是函数,因此 callback 不是函数' 因为 checkNo 似乎充满了 syncrhonous 代码,反正你不需要回调 【参考方案1】:

在调用函数时,您没有使用回调功能。将其更改为正常的函数定义,如下所示。

CheckNo: function () 
var comboQuery = Ext.ComponentQuery.query('[name=foocombo]')[0].getSelectedRecord();
var chkno = comboQuery.get('mychkno'); //Success to get this integer value

return chkno; //Error raises here. Debugger says "callback is not a function"
//if (callback) callback(chkno); //I've tried to check callback but did not work as well.

要了解回调的工作原理,请使用以下链接:

This *** question

【讨论】:

【参考方案2】:
me.checkNo(function() return checkNo;)

【讨论】:

以上是关于Javascript:为啥不能在回调函数中获取变量?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript,回调函数中的变量范围之外?

在javascript中获取嵌套异步函数的变量

为啥 setMouseDown(false) 不能联锁回调函数?

为啥我不能在这个简单的函数中访问这个变量?

node.js 回调获取变量的意外值

为啥我不能在我的回调中调用我的 vue 组件的函数[关闭]