2015-07-21 26 views
0

在使用tumblr API建設項目,當有分配給它的值的數組對象返回的空 - 的Javascript

var latest = []; 
client.posts('XXXXXX', function (err, blog) { 
    for (var i = 0; i < 

    blog.posts.length; i++) { 
     var post = blog.posts[i]; 
     // this condition is used to identify if any blog post is dated no later than 7 days. 
     if ((new Date().valueOf() - Date.parse(post.date)) /(1000*60*60*24) <= 7){ latest.push(post); 
// console.log(post); 
     } 
    }; 
}); 

console.log(latest) 

最新的是一個變量存儲任何博客文章對象滿足條件。當取消註釋的console.log(後),命令行打印張貼對象是這樣的:

{ blog_name: '......', 
    id: ......, 
    post_url: '......', 
    slug: '......', 
    type: 'text', 
    date: '2015-07-20 16:42:30 GMT', 
    timestamp: ...., 
    state: 'published', 
    format: 'html', 
    reblog_key: '.....', 
    tags: [], 
    short_url: '.......', 
    recommended_source: null, 
    followed: false, 
    highlighted: [], 
    liked: false, 
    note_count: 0, 
    title: '.....', 
    body:.......} 

然而,對於執行console.log(最新),命令行打印[]。爲什麼最近在這裏返回一個空數組?

+2

它看起來像'client.posts()'是一個異步方法......在這種情況下,你正在嘗試將無法正常工作......你需要有回調方法中的'console.log()'。 –

回答

1

正如在評論中指出的那樣,client.posts()是一種異步方法,所以它不會按照您預期的那樣繼續工作。

var latest = []; 
client.posts('XXXXXX', function (err, blog) { 
    // This is not reached until AFTER you hear back from the API 
    // and latest has already been logged. 
}); 

console.log(latest) 

如果你想等待打印,直到你聽到從後面API,你將需要使用一些異步編程方法,如承諾或添加你想要的client.posts回調的內部功能。

這將正確打印:

var latest = []; 
client.posts('XXXXXX', function (err, blog) { 
    for (var i = 0; i < blog.posts.length; i++) { 
     var post = blog.posts[i]; 
     if ((new Date().valueOf() - Date.parse(post.date)) /(1000*60*60*24) <= 7){ 
      latest.push(post); 
     } 
    } 
    console.log(latest); // Prints when for loop completes 
}); 
相關問題