如何将require('')对象传递到绑定对象的范围?

时间:2015-01-11 07:47:43

标签: javascript

我正在尝试使用javascript绑定函数将我需要的文件传递到作用域,并让它使用该对象的功能来执行某些代码。

这是一个递归函数,所以简单地说,我有一个对象:

var tts = require('./tts')

此对象使用Web API的语音合成功能将传入的文本转换为语音。

所以,我有一个递归函数,比如说,在完成第一个函数之后应该说下一件事。

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

不幸的是,这不起作用。

谁能告诉我我做错了什么?

我的代码:

tts code

recursive function code

P.S。我正在使用browserify将节点式代码编译成浏览器友好的代码

1 个答案:

答案 0 :(得分: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);