2015-08-14 24 views
3

bowerInstall方法完成後(問題與使用exec命令的其他方法相同),在我的操作中,我正在執行async callback。我需要這個,因爲沒有它,下一個動作將在方法完成之前觸發。爲什麼Yeoman不能在exec方法後執行異步回調?

 _-----_ 
    |  | .--------------------------. 
    |--(o)--| | Yeoman is frustrated | 
    `---------´ |  Help him please!  | 
    (_´U`_) '--------------------------' 
    /___A___\ 
    | ~ | 
    __'.___.'__ 
´ ` |° ´ Y ` 

問題是Yeoman不支持位於方法回調中的異步回調。

default: { 
    installPackage: function() { 
    done = this.async(); 
    this.bowerInstall(this.packageName, function() { 
     done(); 
    }); 
    }, 
    nextAction: function() { 
    // Do stuff after installPackage is completed. 
    } 
} 

在這種情況下,bowerInstall方法永遠不會被觸發,並且運行循環會中斷。

[編輯]解決方案

像西蒙Boudrias說,我不能在安裝環境中使用異步回調。我必須在安裝結束後將我想運行的任務放到最後。

install: { 
    installPackage: function() { 
    this.bowerInstall(this.packageName); 
    } 
}, 
end: { 
    nextAction: function() { 
    // Do stuff after installPackage is completed. 
    } 
} 
+0

對此沒有幫助,但您不需要在函數中包裝完成,然後啓用它。只是通過它不加思索地通過它。例如'this.bowerInstall(this.packageName,done)' – Patrick

+0

@Patrick是的,這是真的,但我在方法回調中做了其他事情。 – guduf

回答

1

Yeoman安裝方法在install任務循環期間自動安排。

通過在此處使用this.async(),您會使進程陷於僵局。

此更改記錄在the v0.18.0 release上。可能值得在安裝方法文檔中更明確地詳細說明這種行爲 - >https://github.com/yeoman/yeoman.io/blob/master/app/authoring/dependencies.md

+0

感謝您的關注西蒙。我藉此機會感謝您爲社區創建的所有偉大工具。我用你的解決方案編輯我的問題。 – guduf

相關問題