koajs yield 循环问题。。
发布于 10 年前 作者 petitspois 7154 次浏览 最后一次编辑是 8 年前 来自 问答
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

需要怎么处理,包裹?

3 回复

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

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

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

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

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

回到顶部