ES6 的“奇葩”执行,yield 相关
工程(Koa、koa-router、sequelizejs、sqlite3)里有这么一段函数作为路由的 handler。 向 ret 对象里插入新的属性,循环插入的过程可以看到正常执行,但循环之后返回的结果却是 {}。
"use strict"
var Host = require('../model/Host.js');
module.exports = {
getList: function* ({
platform = 'audit'
}) {
var hosts = yield Host.findAll();// 通过 sequelize 模块读取数据库
var ret = {};
hosts.forEach( host => { // ? 难道这里有异步?
host = host.dataValues;
let owner = host.owner;
if (!ret[owner]) {
ret[owner] = [];
}
ret[owner].push( host );
console.log( ret[owner] );// 此处可以正常打印出 push 进去的 对象
});
console.log('ret', ret )// {} 这里竟然为空(如果放到 setTimeout 里,输出才符合预期)
return ret;
}
}
10 回复