Javascript 将GET请求中的数据存储在数组中

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

我正在尝试使用以下代码存储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.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。然后
so
console.log
将在
retweetIDs.push(id)
之后执行。当然,但为什么它不起作用?通常,您希望解释问题,而不仅仅是提出建议solution@JuanMendesJavaScript是一种单线程语言。因此,每个HTTP请求都需要等待。为了不阻塞线程,我们将希望在HTTP请求结束时执行的代码传递到回调中(这是传递给
then
函数的内容)。同时,代码继续运行。当请求返回时,它将调用您发送到
然后
的回调。你想运行的每一个代码——把他推到回调中。我明白为什么:)我只是向你解释,答案不应该只是发布一些工作代码,他们应该解释问题是什么。解释属于答案本身,可能是解释
then
中的行是在函数返回后执行的