2017-07-07 67 views
-1

這是我正在使用的代碼。它不起作用,因爲client.getPosts是異步的。所以我的問題是,我怎樣才能使它工作? client.getPosts來自wordpress npm模塊,所以我不能改變它。如何在函數內部放置一個異步函數?

// FUNCTIONS 

function getAllPosts() { 
    return client 
     .getPosts({type: 'post', status : 'publish', number : 222} , ['title','id'] , (error, posts) => { 
     return posts 
      .map((item) => { 
      return item.title 
      }) 
     }) 
} 


// MAIN 

console.log(getAllPosts()); 
+0

可能重複[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

+0

我使用lamba函數來吸收你,所以你可以這樣做: somFunction =()=> client.getPost(config) 然後在調用函數時使用promises – arracso

+0

@arracso任何你可以寫我的字面意思是什麼我需要寫?我一直在努力理解很長時間的承諾,但仍不明白如何使用它們,尤其是在我使用模塊的情況下。 –

回答

1

您可以簡單地將回調函數傳遞給getAllPosts

getAllPosts(cb){ 
return client 
    .getPosts({type: 'post', status : 'publish', number : 222} , ['title','id'] , (error, posts) => { 
    cb(posts 
     .map((item) => { 
     return item.title 
     })) 
    }) 
} 

getAllPosts(function(posts){ 
    console.log(posts) 
}) 
+0

謝謝,這是有效的。儘管如此,我還是不太明白。事情發生的順序是什麼? –

+0

不客氣。 當您調用'getAllPosts'時,它會調用異步'getPosts'函數,並且當結果來自服務器時,'getPosts'的回調函數會觸發: '.getPosts({something},(err,posts)=> { }' '(err,posts)=> {}'是'.getPosts'的回調函數,我們將在其中調用我們的回調函數'cb'並將結果傳遞給它。 爲了便於理解,請閱讀本文[鏈接](http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/) –

0

in .getPosts()您正在使用的方法3 params對象的數組和函數參照。

重點是您要發送到該功能的參考。你應該在你的過程結束後執行那個函數。但是你的代碼行不會等待你的進程結束。

+0

我返回client.getPosts,是不是執行相同的事情? –

+1

當您在更高級的功能中返回您的值時,您的過程仍在運行。 theres沒有回報。 –

+0

不認爲單一的時間表。如果你創建進程的JavaScript在theres多時間線 –