我在学习JS。我正在使用Mongoose,我想将函数和参数传递给回调函数,但我必须使用call()。
// Car is a model. Using Express in Node.js
express.Router().route('/')
.get((req,res,next)=>{
print(res,next,Cars.find)
})
const print = async(res,next,func,param1={})=>{
try {
const cars = await func.call(Cars,param1)
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(cars);
} catch (err)
next(err);
}
当我简单地在print(...)内部执行func(param 1)时,它不起作用,它返回这个错误。
MongooseError: `Model.find()` cannot run without a model as `this`.
Make sure you are calling `MyModel.find()` where `MyModel` is a Mongoose model.
你能解释一下为什么吗?我什么时候需要使用apply()/call()来传递这个?在这种情况下 Mongoose 和一般?
另外,我对next()和next(err)有点困惑。文档中说,这只是为了让程序在某种意义上“跳过”错误,我可以明显地看到这一点。但是它是像一个回调函数,我们可以修改或它是内置的东西?
编辑:我在看How to access the correct this
inside a callback,是因为对象没有传入print()
吗?
1条答案
按热度按时间wribegjk1#
在js中,
this
是在运行时确定的,并引用了运行方法的内容。如果该方法由箭头函数定义或在箭头函数中调用,则this
向上冒泡到父函数。在本例中,如果我没有使用call()
,this
将是get()
。所以我是正确的,父对象Cars
没有和Cars.find()
沿着传递。