koa中我想等数据库写入完之后再返回值,但发现请求是404
刚刚开始学习koajs,我在想把通过post传入的数据存入数据库之后再应答请求 具体代码:
function *(next) {
var _this = this;
var post = new Post({
content: this.request.body.content,
sequence: this.request.body.sequence
});
var promise = new Promise(function(resolve, reject) {
post.save(function(err, result) {
if (err) {
reject();
}else {
resolve();
};
});
});
promise.then(function() {
return _this.body = {
result: 'haha'
}
}, function() {
return _this.body = {
result: 'wuwu'
}
});
}
然后我发现我的请求返回值都是404,使用了bodyparser包,不知道和这个有没有关系
8 回复
你这个是在异步回调里才设置body的 你试着在这个middleware最后直接加一句this.body = ‘hello world’; 应该就不是404了 其实你可以把save方法包装一下,用thunkify或者自己写 直接yield多好 就没这问题了
最后面 return promise;
@hwoarangzk 您好能稍微详细一点说下怎么包装吗?刚刚开始接触不是太会
var save = thunkify(post.save);
save()(function(){
this.body = {
result: 'hahah'
}
});
是这样吗?
@mukaiu 是在整个函数的最后面return promise吗?
@alonprince <pre> var save = thunkify(post.save); var result = yield save(); this.body = result; </pre> 类似这样
@hwoarangzk 好的,我试下,谢谢
@hwoarangzk 解决问题了,谢谢
this.body = yield promise;
yield可以直接用在promise上