我正在尝试使用 javascript 绑定(bind)函数将我需要的文件传递到作用域中,并让它使用该对象的功能来执行一些代码。
这是一个递归函数,简单来说,我有一个对象:
var tts = require('./tts')
该对象使用 Web API 的语音合成功能将传入的文本转换为语音。
所以,我有一个递归函数,在第一个函数完成后,说一些事情,应该说下一个事情。
function saySomething(idx) {
tts('first thing',saysomething.bind(this,'next thing'))
}
但是不幸的是,这不起作用。
谁能告诉我我做错了什么?
我的代码:
附注我正在使用 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/