2013-06-03 84 views
-1

我對CoffeeScript的一些代碼(PhantomJS下運行):類中的CoffeeScript

class Loadtime 
    constructor: -> 
    @page = require('webpage').create() 

    check: (uri) -> 
    time = Date.now() 
    @page.open uri, (status) -> 
     console.log 'foo' 
     if 'success' is status 
     time = Date.now() - time 
     return time 
     else 
     return "FAIL to load #{uri}" 

loadtime = new Loadtime() 
console.log loadtime.check('http://example.com') # undefined 
phantom.exit() 

類具有構造函數和一個公共方法。
@page.open uri, (status) -> ...必須調用回調函數,但它不會調用它(行console.log 'foo'不執行)。 爲什麼?

回答

3

您正在呼叫phantom.exit,所以沒有時間加載網頁。回調添加到您致電在open回調結束你的check功能,並調用phantom.exit傳遞給check回調中:

class Loadtime 
    constructor: -> 
     @page = require('webpage').create() 

    check: (uri, cb) -> 
     # ... 
     @page.open uri, (status) -> 
      # ... 
      cb() 

loadtime = new Loadtime 
loadtime.check 'http://www.example.com/', (time) -> 
    console.log time 
    process.exit() 
+0

好了,謝謝你。 你能告訴我如果我將刪除'phantom.exit()',我該如何等待函數'@ page.open uri'的執行結束? –

+0

@SergeyBlohin:您需要在'check'中添加一個參數,以便您可以將回調傳入,然後修改您的調用代碼以使其異步執行。我編輯了我的答案,以更清楚地顯示可能的樣子。 – icktoofay