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

标签 javascript

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

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

var tts = require('./tts')

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

所以,我有一个递归函数,在第一个函数完成后,说一些事情,应该说下一个事情。

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

但是不幸的是,这不起作用。

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

我的代码:

tts code

recursive function code

附注我正在使用 browserify 将节点样式代码编译为浏览器友好的代码

最佳答案

假设tts()是一个异步函数,在完成时调用其回调,您可以在完成后调用下一个函数,如下所示:

function saySomething(idx) {
    tts('first thing', function() {
        tts('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);

关于javascript - 如何将 require ('' ) 对象传递到绑定(bind)对象的范围中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27885049/

相关文章:

javascript - 匹配2个单词的正则表达式

javascript - 无法设置仅数字输入

javascript - 在 JavaScript 中对二维数组进行排序

javascript - jquery .html() 无效字符 "#"

c# - 追踪 IP 地址并找到所有者

javascript - 设计 React 组件样式的最佳实践

javascript - 如何将 HtmlAgilityPack.CssSelectors 公开到 ClearScript 中

javascript - 如何使用 $location.search 转到上一页?

javascript - 如何清除除第一个索引之外的数组?

javascript - hbbtv 应用程序在真实电视上测试/调试