koa中我想等数据库写入完之后再返回值,但发现请求是404
发布于 7 年前 作者 alonprince 5710 次浏览 最后一次编辑是 6 年前 来自 问答

刚刚开始学习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上

回到顶部