2014-04-14 27 views
-1

這將是對我非常有用的,如果你能幫助我解決這個功能:返回值

textParseQuery = (txtSnippet) ->  
    queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}" 
    console.log queryUrl 
    callback = (response) => 
     parsed = $.parseJSON response 
     companies = parsed.map (obj) -> new Company(obj.name, obj.addr) 
     companies 
    res = $.get queryUrl, {}, callback 
    console.log res 

我想從回調獲取結果,這樣的textParseQuery函數可以返回一個值。

+0

的[變量不從AJAX函數返回]可能重複(http://stackoverflow.com/questions/12475269/variable-doesnt-get-returned-from -ajax-function) –

+0

我想用慣用的coffeescript代碼(使用胖箭頭'=>'?) – NoIdeaHowToFixThis

+0

你的意思是你不知道如何將JS轉換爲CS?然後使用JS。 –

回答

0

我發現IcedCoffeeScript有助於簡化異步控制流程awaitdefer。這是我試圖實現的。該代碼的結構是怎麼把它描寫

# Search for 'keyword' on twitter, then callback 'cb' 
# with the results found. 
search = (keyword, cb) -> 
    host = "http://search.twitter.com/" 
    url = "#{host}/search.json?q=#{keyword}&callback=?" 
    await $.getJSON url, defer json 
    cb json.results 
1

回調的關鍵是它是異步的,你的迴應來自回調,所以你需要處理回調中的其餘執行(例如,console.log res將在調用回調之前執行,因爲它是部分與你的ajax調用同步執行)。

textParseQuery = (txtSnippet) ->  
    queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}" 
    callback = (response) -> 
     parsed = $.parseJSON response 
     companies = parsed.map (obj) -> new Company(obj.name, obj.addr) 

     # proceed from here 
     console.log companies 
    $.get queryUrl, {}, callback 

附加說明:脂肪箭頭是不必要在這裏,它是用來重新綁定什麼this指,但你是不是在你的回調引用this可言。如果你正在學習咖啡,大多數編輯會有插件/模塊來快速將咖啡編譯成JS,所以用它來查看給定的咖啡語法在JS中編譯的內容(例如,看看使用->=>之間的差異時你編譯你的咖啡)

+0

謝謝。我確實設法以我在IcedCoffeeScript的幫助下想到的方式構建代碼 – NoIdeaHowToFixThis