Javascript 将GET请求中的数据存储在数组中
我正在尝试使用以下代码存储tweet中的id,以备以后使用:Javascript 将GET请求中的数据存储在数组中,javascript,ajax,Javascript,Ajax,我正在尝试使用以下代码存储tweet中的id,以备以后使用: let twit = require('twit'); let config = require('./config.js'); const T = new twit(config); let retweetIDs = []; const promise = T.get('statuses/user_timeline', {screen_name: 'someusername', count: '1'}); promise.t
let twit = require('twit');
let config = require('./config.js');
const T = new twit(config);
let retweetIDs = [];
const promise = T.get('statuses/user_timeline', {screen_name: 'someusername', count: '1'});
promise.then(res =>{
let id = res["data"][0]["id"];
retweetIDs.push(id)
});
console.log(retweetIDs)
console.log()返回的是一个空数组[]
虽然我知道javascript是异步的,所以在GET请求返回响应之前会执行log语句,这就是它发生的原因,但我不知道如何修复它。任何帮助都将不胜感激。只需移动
控制台。将登录到中,然后:
promise.then(res =>{
let id = res["data"][0]["id"];
retweetIDs.push(id);
console.log(retweetIDs);
});
如果您对更多同步代码感兴趣(推荐),请尝试使用async await
如下:
let twit = require('twit');
let config = require('./config.js');
(async () => {
let retweetIDs = [];
const
url = 'statuses/user_timeline',
params = { screen_name: 'someusername', count: '1' },
result = await new twit(config).get(url, params),
{ id } = result.data[0];
retweetIDs.push(id);
console.log(retweetIDs);
})();
这回答了你的问题吗?只需将console.log
移动到promise。然后soconsole.log
将在retweetIDs.push(id)
之后执行。当然,但为什么它不起作用?通常,您希望解释问题,而不仅仅是提出建议solution@JuanMendesJavaScript是一种单线程语言。因此,每个HTTP请求都需要等待。为了不阻塞线程,我们将希望在HTTP请求结束时执行的代码传递到回调中(这是传递给then
函数的内容)。同时,代码继续运行。当请求返回时,它将调用您发送到然后
的回调。你想运行的每一个代码——把他推到回调中。我明白为什么:)我只是向你解释,答案不应该只是发布一些工作代码,他们应该解释问题是什么。解释属于答案本身,可能是解释then
中的行是在函数返回后执行的