一段koa调用mongoose的代码,求解惑
发布于 10天前 作者 notek 237 次浏览 来自 问答
function execQuery(query) {
    return function(fn){
        query.exec(function (e, res){
            (e) return fn(e);
            fn(null, res);  //想问下,这个fn是做什么的?去掉fn就没法正确返回数据
        });
    }
}
this.body = yield execQuery(query);
8 回复

fn 是没有错误时成功的回调

@xiaokekeT 这个fn是在哪儿定义的呢?execQuery函数是手写的,非框架的,并没有定义这个fn啊

@notek fn是约定出来的,这个fn是给别人用的,别人在某个地方调用这个fn。

/* 定义Schema */ var mongoose = require(‘mongoose’); var Schema = mongoose.Schema; //先定义你自己的Schema var yourSchema = new Schema({ //… }); //定义查询函数listByQuery,名字自己起 yourSchema.statics.listByQuery(queryParams){ var query = this.find(queryParams); return yield query.exec(); }; module.exports = yourSchema;

/* 在controller调用 */ var yourModel= require(‘…/yourSchema’); this.body=yield yourModel.listByQuery(queryParams);

/* 写的没那么全,看懂基本思路即可 */

看下co的源码,fn就是next

Promise 比 thunk 好理解,真的

试试改成 this.body = yield query.exec();

@nswbmw this.body = yield query.lean().exec();

回到顶部