NodeJS JS:何时需要Function.prototype.apply()或call()来引用这个

w1jd8yoj  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(202)

我在学习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()吗?

wribegjk

wribegjk1#

在js中,this是在运行时确定的,并引用了运行方法的内容。如果该方法由箭头函数定义或在箭头函数中调用,则this向上冒泡到父函数。在本例中,如果我没有使用call()this将是get()。所以我是正确的,父对象Cars没有和Cars.find()沿着传递。

相关问题