范围问题:已移动的函数现在找不到变量

时间:2019-01-20 10:48:50

标签: javascript function

我正在使用Framework7开发混合应用程序(仅针对我自己),并且几乎所有功能都可以正常工作。我想整理一下代码并将一些重复的代码移到一个函数中。但是现在我得到了错误

ReferenceError:找不到变量:解析

我只是在学习JS,最近几天对范围和上下文有了更多的了解,但是我不知道为什么会出现此错误。据我了解,由于resolve()回调函数是在外部范围中定义的,因此我必须能够从自定义函数中调用它吗?

当我将app.request()放在getJson()函数所在的位置时,它可以工作。但是,该请求仍然可以在getJson()中运行,并且可以看到记录的数据,但是resolve函数无法按预期运行。

routes = [
    {
        path: '/person/abc/',
        async: function (routeTo, routeFrom, resolve, reject) {
            var router = this;
            var app = router.app;
            var jwt = store.get('jwt');
            app.preloader.show();
            getJson(
                jwt,
                {document:'person'},
                'Test',
                '-/-'
            );

        },
    },
];


function getJson(jwt, data, title, note) {
    app.request({
        url:            'https://example.com/json/',
        method:         'GET',
        dataType:       'json',
        crossDomain:    true,
        data:           { data },
        headers:        { Authorization: 'Bearer ' + jwt },
        success: function(data, textStatus){
            if (data.status === 'ALLOW') {
                console.log('Data received');
                resolve(
                    {
                        componentUrl: './pages/person.html',
                    },
                    {
                        context: {
                            title: title, note: note, person: data.person,
                        }
                    }
                );
            } else {
                app.dialog.alert('Error loading data');
            }
            app.preloader.hide();
            return;
        },
        error: function(xhr, textStatus, errorThrown){
            console.log('Error', xhr.response);
            app.preloader.hide();
            app.dialog.alert('Error on request');
            return;
        }
    });
}

0 个答案:

没有答案