为什么我不能将数组的位置 0 与 __proto__ 一起使用?
Why am I not being able to use position 0 of an array with __proto__?
我无法使用代码中的数组。我不知道为什么 __proto__
在那里
它看起来像一个普通的数组,但是当我想访问位置 0 (arr [0]) 的值时,控制台 returns "undefined".
这里是 javascript 代码:
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
getData().then( val => {
res.push(val);
})
console.log(res);
这是因为 console.log(res);
行比函数 getData()
完成得更快。
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
getData().then( val => {
res.push(val);
console.log(res);
console.log(res[0]);
})
将语句放在函数中getDate()
或再次使用.then()
来处理数据。
试试这个:
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
function showData(callback){
getData().then( val => {
res.push(val);
});
setTimeout(function() {
callback();
}, 1500);
}
showData( function(){
console.log(res[0])
});
proto 是一个内置的 javascript 对象的继承指针,指向其父对象。 (在javascript中,函数也是一个对象)。在您的示例中,getData() 继承自 AsyncFunction,因此如果您调用 getData().proto,它会为您提供一个 AsyncFunction 对象。给它一些时间来获取数据,你就可以得到结果。
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
function showData(callback){
getData().then( val => {
res.push(val);
callback();
});
}
showData( function(){
console.log(res[0])
});
这是另一个解决方案,几乎与 TmasYIN 的相同。您可以添加一个在 .then() 函数内部执行的回调函数,并且该回调函数是在您执行 showData 时定义的。
在承诺上注册处理程序后,您无法立即访问承诺的结果(即其已实现的值),因为承诺代码 never 同步调用提供给它的处理程序.
当承诺被解决或拒绝时,承诺代码将作业放入承诺作业队列中执行处理程序(并监视它们的行为),将执行任务从队列留给事件循环管理器。
此演示显示数据未通过 then
在事件循环的同一调用中传输,但在返回事件循环后可用:
let dataPromise = new Promise( resolve => resolve("hello, I'm data"));
var res=[];
res.ready = false;
dataPromise.then(data => {
res.push(data);
res.ready = true;
});
function processData() {
console.log(
"ready: %s", data: %s",
res.ready, res[0]);
}
processData(); // won't work
setTimeout( processData, 20); // will work
使用承诺获得的数据只能通过承诺接口获得。使用数据的代码可以通过调用承诺的 then
方法或在 async
函数内的承诺之前使用 await
来注册对数据承诺的回调。
显然在实际应用中,在服务器响应、浏览器收到回复并通知结果的脚本代码之前,服务器请求的数据也是不可用的。
我无法使用代码中的数组。我不知道为什么 __proto__
在那里
它看起来像一个普通的数组,但是当我想访问位置 0 (arr [0]) 的值时,控制台 returns "undefined".
这里是 javascript 代码:
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
getData().then( val => {
res.push(val);
})
console.log(res);
这是因为 console.log(res);
行比函数 getData()
完成得更快。
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
getData().then( val => {
res.push(val);
console.log(res);
console.log(res[0]);
})
将语句放在函数中getDate()
或再次使用.then()
来处理数据。
试试这个:
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
function showData(callback){
getData().then( val => {
res.push(val);
});
setTimeout(function() {
callback();
}, 1500);
}
showData( function(){
console.log(res[0])
});
proto 是一个内置的 javascript 对象的继承指针,指向其父对象。 (在javascript中,函数也是一个对象)。在您的示例中,getData() 继承自 AsyncFunction,因此如果您调用 getData().proto,它会为您提供一个 AsyncFunction 对象。给它一些时间来获取数据,你就可以得到结果。
const apiUrl = 'https://api.covid19api.com/dayone/country/south-africa';
async function getData(){
const response = await fetch(apiUrl);
const data = await response.json();
const arr = data.reduce((acc, cur) => cur.Confirmed ? [...acc, cur.Confirmed] : acc, []);
return arr;
}
var res = [];
function showData(callback){
getData().then( val => {
res.push(val);
callback();
});
}
showData( function(){
console.log(res[0])
});
在承诺上注册处理程序后,您无法立即访问承诺的结果(即其已实现的值),因为承诺代码 never 同步调用提供给它的处理程序.
当承诺被解决或拒绝时,承诺代码将作业放入承诺作业队列中执行处理程序(并监视它们的行为),将执行任务从队列留给事件循环管理器。
此演示显示数据未通过 then
在事件循环的同一调用中传输,但在返回事件循环后可用:
let dataPromise = new Promise( resolve => resolve("hello, I'm data"));
var res=[];
res.ready = false;
dataPromise.then(data => {
res.push(data);
res.ready = true;
});
function processData() {
console.log(
"ready: %s", data: %s",
res.ready, res[0]);
}
processData(); // won't work
setTimeout( processData, 20); // will work
使用承诺获得的数据只能通过承诺接口获得。使用数据的代码可以通过调用承诺的 then
方法或在 async
函数内的承诺之前使用 await
来注册对数据承诺的回调。
显然在实际应用中,在服务器响应、浏览器收到回复并通知结果的脚本代码之前,服务器请求的数据也是不可用的。