繁体   English   中英

调用带有promise函数的for循环仅工作一次

[英]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()函数多次运行?

谢谢

因此,我猜那里实际上存在两个可能的问题。

您没有返回output.send的结果

T.rec(function(output) {
    //... composition here, full at: http://mohayonao.github.io/timbre.js/RecordingMode.html
    return output.send(synth);
}

这将使Promise链上的下一个处理程序实际获得buffer值(如果确实由send同步返回了buffer值)。

T.rec可以并行运行吗?

你想在同一时间录制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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM