CNode

koajs yield 循环问题。。

问答
Ppetitspois发布于11 年前最后回复11 年前3 回复7945 浏览0 收藏
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)

P
petitspois#1·11 年前

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

M
magicdawn#2·11 年前

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

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

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

I
iwillwen#3·11 年前

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

参与回复
登录后即可参与回复。登录