使用Promise设置全局变量的问题

时间:2019-02-20 19:33:57

标签: javascript promise

我想使用一个函数来填充全局变量,然后在完成后调用后续函数。我目前拥有的代码是:

$(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的值,但是当我尝试在generateTabs()中访问jsonData时,它显示为未定义。

编辑:忘记了解析语句 编辑2:修正了帖子中的标点,我的代码中的标点是正确的,所以问题仍然存在。

根据Adiga的建议,将dataRetrievalPromise替换为下面的内容,但行为相同。

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

1 个答案:

答案 0 :(得分:0)

  

我想使用一个函数来填充全局变量

不,不要那样做。 (实际上,您的代码与您在jsonData范围内声明$(function () {…})而不是将其声明为全局变量这一事实有所不同)。但是,您仍然不应在此处使用全局变量,该变量会在未知的时间点(当承诺解决时)填充。相反,只需将promise结果作为参数传递给您随后调用的函数:

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;
}