[英]For loop that calls a function with a promise works just once
我正在尝试获取timbre.js记录功能来创建多个缓冲区并将它们存储在一个对象中。 创建录音并将其存储在“歌曲”对象中的函数在此处:
var generateSong = function(songtitle){
T.rec(function(output) {
//... composition here, full at: http://mohayonao.github.io/timbre.js/RecordingMode.html
output.send(synth);
}).then(function(buffer) {
var songobject = {}
var song = T("buffer", {buffer:buffer});
songobject['song'] = song;
songobject['buffer'] = buffer.buffer[0];
songobject['samplerate'] = buffer.samplerate;
songs[songtitle] = songobject;
console.log('test message');
});
};
然后,我尝试使用for循环多次调用此命令,如下所示:
for(var i=0;i<5;i++){
var songtitle = generateSongTitle();
var songobject = generateSong(songtitle);
}
但是,我只收到一条测试消息记录到控制台,因此循环似乎在运行一次然后停止。 我试过将代码的'then()'向前部分移到for循环本身内(即generateSongTitle()。then(...)),但这存在相同的问题。 如何获得generateSong()函数多次运行?
谢谢
因此,我猜那里实际上存在两个可能的问题。
T.rec(function(output) {
//... composition here, full at: http://mohayonao.github.io/timbre.js/RecordingMode.html
return output.send(synth);
}
这将使Promise链上的下一个处理程序实际获得buffer
值(如果确实由send
同步返回了buffer
值)。
你想在同一时间录制5首歌曲?
您可能应该等待一首歌曲完成后再录制下一首。
function generate() {
var songtitle = generateSongTitle();
var songobject = generateSong(songtitle);
return songobject;
}
var nextSong = $.when(); // or any empty promise wrapper
for(var i=0;i<5;i++){
nextSong = nextSong.then(generate);
}
理论上,这将顺序产生5首歌曲! 告诉我是否可行:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.