我想使用一个函数来填充全局变量,然后在完成后调用后续函数。我目前拥有的代码是:
$(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" }] });
});
};
答案 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;
}