koajs yield 循环问题。。
发布于 12天前 作者 petitspois 596 次浏览 来自 问答
for (var i = 0; i < comments.length; i++) {
            comments[i].avatar = (yield commentModel.getAvatar({name: comments[i].name})).author.avatar;
            comments[i].createtime = formatDate(comments[i].createtime, true);
            comments[i].comment = marked(comments[i].comment);
            comments[i].cid = String(comments[i]._id);
        }

不会错误

       _.forEach(comments,function(comment, key){
                 console.log((yield commentModel.getAvatar({name: comment.name})))
        });
        //SyntaxError: Unexpected identifier
        //lodashjs

需要怎么处理,包裹?

4 回复

_.forEach / Array.prototype.forEach 只接受 normal function

你在function (){ }里面写yield就是unexpect identifier 写成function * () { } 放在forEach里也没效果,因为调用这个GeneratorFunction得到的是Generator,只有调用generator.next()函数才会开始执行

正确姿势是Promise.each (bluebird里有) componentModel.getAvatar 返回Promise直接用,返回其他类型用co.wrap

yield xxx.map(function* (item) {
  // yield xxx
  return xxx
})

@nswbmw [{},{},{}] 我是处理这样的数据,没太看懂。。。

用map返回一個generator function的數組,最外面yield。

回到顶部