因此,我正在函数中填充数组,但是当我在函数外部调用该数组时,我非常确定它会以字符串形式出现。当我尝试调用[1]时,该数组在函数内部运行良好,但是如果尝试在函数外部执行该操作,它将显示为未定义。
希望我能快点完成这段代码,但是有人阻止了我,谢谢。
仅供参考以防万一,当我在功能之外控制台日志时,它会像这样出现:
[]
0: 7604
1: 7606
2: 7607
3: 7608
然后在函数中像这样:
(4) [7604, 7606, 7607, 7608]
0: 7604
1: 7606
2: 7607
3: 7608
这也是代码,出于安全考虑,我删除了令牌,同时也忽略了代码的某些部分,例如posturl,因为一旦我弄清楚了,它们将被使用:
var geturl = "https://api.sendgrid.com/v3/asm/suppressions/ibrarr2000@gmail.com";
var posturl = "https://api.sendgrid.com/v3/asm/groups/"+ +"/suppressions";
var deleteurl = "https://api.sendgrid.com/v3/asm/groups/"+ +"/suppressions/ibrarr2000@gmail.com";
var token = "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";
let headers = new Headers();
let myData = {};
headers.append('Authorization', 'Bearer ' + token);
//supressionids = new Array();
var supressionids = [];
fetch(geturl, {
method: 'GET',
headers: headers,
}).then(function (res) {
return res.json();
}).then(function (data) {
myData = data;
buildSelect(data);
});
function buildSelect(d) {
let select = document.createElement('form');
d.suppressions.forEach(function (item) {
let label = document.createElement('label');
let option = document.createElement('input');
option.value = item.suppressed;
option.type = "checkbox";
option.setAttribute("onclick","task(event);");
option.id = item.id;
option.classList = "subbox";
option.textContent = item.name;
label.textContent = item.name;
select.appendChild(label);
select.appendChild(option);
supressionids.push(item.id);
let br = document.createElement('br');
select.appendChild(br);
if(JSON.stringify(item.suppressed) == 'false'){
option.setAttribute("checked", "checked");
}
});
document.querySelector('body').appendChild(select);
console.log(supressionids);
}
console.log(supressionids);
function task(e) {
if(e.target.checked){
fetch(deleteurl, {
method: 'DELETE',
headers: headers,
});
} else {
fetch(posturl, {
method: 'POST',
body: JSON.stringify({ "recipient_emails": [ "ibrarr2000@gmail.com" ] }),
headers: headers,
});
}
}
答案 0 :(得分:0)
问题是GET
需要一些时间来获取数据。在检索数据时,代码继续进行下一段,即同一作用域中的console.log
。使用一个函数包含要运行的所有代码。将您的fetch
更改为此:
fetch(geturl, {
method: 'GET',
headers: headers,
}).then(function (res) {
return res.json();
}).then(function (data) {
myData = data;
runCode(data);
});
然后添加一个包含函数:
function runCode(data){
buildSelect(data);
console.log(supressionids);
}
您的另一个选择是将所有代码包含在.then()
调用中,或使用多个.then()
调用。