我有一个数字流,我必须使用承诺将它们变成一个帖子流。我想懒惰地这样做。所以如果我这样做.take(1)
从帖子流中,它只会将一个数字转换为一篇帖子。
这是从某个号码获取帖子的承诺:
var getPost = function(author) {
console.log('get post' + author);
return new RSVP.Promise(function(resolve, reject) {
setTimeout(function() {
var result = "Post by " + author;
resolve(result);
}, 1000);
});
};
我只对第一篇文章感兴趣,因此take(1)
,并且它应该调用getPost
once.
如果我使用map
,流工作惰性,调用getPost
一次。如果我使用flatmap
,它调用getPost
对于所有的数字。
var lazyStream = Bacon.fromArray([1, 2, 3, 4]).map(function(value) {
return Bacon.fromPromise(getPost(value));
});
var nonLazyStream = Bacon.fromArray([1, 2, 3, 4]).flatMap(function(value) {
return Bacon.fromPromise(getPost(value));
});
lazyStream.take(2).log();
//nonLazyStream.take(2).log();
However map
返回一个承诺,同时flatMap
返回帖子本身。如何拥有一个返回 Promise 值的惰性流?