2015-01-11 39 views
0

我正在嘗試使用JavaScript綁定函數將所需的文件傳遞到作用域中,並讓它使用該對象的功能來執行某些代碼。如何將require('')對象傳遞給綁定對象的作用域?

這是一個遞歸函數,所以簡單地說,我有一個對象:

var tts = require('./tts') 

這個對象使用Web API的語音合成功能,把這一傳遞在成語音的文本。

所以,我有一個遞歸函數,說什麼,應該說下一件事,第一個完成後。

function saySomething(idx) { 
    tts('first thing',saysomething.bind(this,'next thing')) 
} 

不幸的是,這是行不通的。

誰能告訴我我做錯了什麼?

我的代碼:

tts code

recursive function code

附:我使用browserify編譯節點式代碼到瀏覽器友好的代碼

+0

你能拿出一個簡單的例子?你的實際代碼太複雜了,沒有任何意義:( – thefourtheye

回答

1

假設tts()是調用其回調的時候,它的完成一個異步功能,可以調用接下來的事情時就像下面這樣:

function saySomething(idx) { 
    tts('first thing', function() { 
     tts('next thing'); 
    }) 
} 

這會說first thing,然後說next thing,然後完成。雖然乍一看,這似乎是遞歸的,但由於回調的異步特性,它不會像每次調用一樣會定期遞歸調用來累積堆棧幀。第一次撥打電話tts()實際上已經在第二次呼叫之前返回。

如果你真的想要做的就是通過話要說數組迭代,你可以是這樣做的:

var phrases = ["one", "two", "three", "four"]; 

function sayPhrases(items) { 
    var index = 0; 

    function next() { 
     if (index < items.length) { 
      tts(items[index++], next); 
     } 
    } 
    next(); 
} 

sayPhrases(phrases); 
+0

Ahhhhhh我怎麼看不到?我可以發誓我試過了。非常感謝你! –

+1

@ZaneHitchcox - 我添加了一個例子,如果你想遍歷一個數組的事情要說。 – jfriend00