Проблема с использованием Promise для установки глобальной переменной - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу использовать функцию для заполнения глобальной переменной, а затем вызывать последующие функции после завершения.В настоящее время у меня есть код:

$(function () {
    var jsonData = {};

    var dataRetrievalPromise = function () {
        return new Promise(function (resolve, reject) {
             jsonData = { "data": [{ "test": "value1" }, { "test2": "value2" }, { "test3": "value3" }] }
             return resolve(jsonData);
        });       
     }

    dataRetrievalPromise().then(function (result) {
         generateTabs();
    });
});

function generateTabs() {
    var test = jsonData;
};

dataRetrievalPromise успешно устанавливает значение jsonData, однако, когда я пытаюсь получить доступ к jsonData в generateTabs (), он отображается как неопределенный.

Редактировать: забылиОператор разрешения Edit 2: Исправлена ​​пунктуация в посте, пунктировка в моем коде была / была правильной, поэтому проблема остается.

Согласно предложению Адиги заменил dataRetrievalPromise на ниже, но поведение остается тем же.

var dataRetrievalpromise = function () {
    return new Promise(function (resolve, reject) {
        return resolve(jsonData = { "data": [{ "test": "value1" }, { "test2": "value2" }, { "test3": "value3" }] });
    });
};

1 Ответ

0 голосов
/ 21 февраля 2019

Я хочу использовать функцию для заполнения глобальной переменной

Нет, не делайте этого.(Ваш код фактически работает отдельно от того факта, что вы объявили jsonData внутри области действия $(function () {…}), а не как глобальную переменную).Но, тем не менее, вы не должны использовать глобальную переменную, которая заполняется в неизвестный момент времени (когда обещание разрешается).Вместо этого просто передайте результат обещания в качестве аргумента функции, которую вы впоследствии вызовете:

function retrieveData() {
    return new Promise(function(resolve, reject) {
        resolve({ "data": [{ "test": "value1" }, { "test2": "value2" }, { "test3": "value3" }] });
    });       
}

retrieveData().then(function (result) {
     generateTabs(result);
//                ^^^^^^
});

function generateTabs(jsonData) {
    var test = jsonData;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...