使用 promise 调用函数的 for 循环只工作一次
For loop that calls a function with a promise works just once
我正在尝试获取 timbre.js 记录功能来创建多个缓冲区并将它们存储在一个对象中。创建录音并将其存储在 'songs' 对象中的函数在这里:
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);
}
但是我只将一条测试消息记录到控制台,因此循环似乎 运行ning 一次然后停止。我试过将代码的 '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);
}
这将使承诺链上的下一个处理程序能够实际获得 buffer
值(如果它确实由 send
同步返回)。
可以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 首歌曲...理论上!告诉我它是否有效:)
我正在尝试获取 timbre.js 记录功能来创建多个缓冲区并将它们存储在一个对象中。创建录音并将其存储在 'songs' 对象中的函数在这里:
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);
}
但是我只将一条测试消息记录到控制台,因此循环似乎 运行ning 一次然后停止。我试过将代码的 '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);
}
这将使承诺链上的下一个处理程序能够实际获得 buffer
值(如果它确实由 send
同步返回)。
可以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 首歌曲...理论上!告诉我它是否有效:)