簡體   English   中英

如何在Node.JS中使用.bind?

[英]How Do I use .bind in Node.JS?

仍在努力使.bind

如果我有...

 dbAccess.runCommand('INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
                            req.getConnection,
                            email)()
                .then(setProjectPermission(req, res, 'insertId', projectId, permissionLevel));

和....

function setProjectPermission(req, res, arg, projectId, permissionLevel) {

  return function(result) {

    var id = result.rows[0][arg];

    ...

我可以使用.bind這樣就不必使用返回函數的函數了嗎? 我正在努力了解如何進行匿名關閉。 例如,如果是EC6,我會這樣做(我認為)...

 dbAccess.runCommand('INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
                            req.getConnection,
                            email)()
                .then(result => setProjectPermission(req, res, result.insertId, projectId, permissionLevel));

和....

function setProjectPermission(req, res, idArg, projectId, permissionLevel) {

    var id = idArg;

    ...

是否可以在不返回期望“結果”的函數的情況下執行此操作?

例如,如果是EC6,我會這樣做(我認為)...

(“ EC6” =>“ ES2015”或“ ES6”)是的,確切地說,所有最新版本的Node都支持箭頭函數語法。 除了最后的()有點狡猾:

dbAccess.runCommand('INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
                        req.getConnection,
                        email)()
// ---------------------------^^ These shouldn't be there, you've *already* called `runCommand`
            .then(result => setProjectPermission(req, res, result.insertId, projectId, permissionLevel));

因此(抱歉,我也調整了縮進):

dbAccess.runCommand(
        'INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
        req.getConnection,
        email
    )
    .then(result => setProjectPermission(req, res, result.insertId, projectId, permissionLevel));

如果需要在舊版Node上運行,則可以使用function語法:

dbAccess.runCommand(
        'INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
        req.getConnection,
        email
    )
    .then(function result {
        return setProjectPermission(req, res, result.insertId, projectId, permissionLevel);
    });

由於您不在此處使用this ,因此不需要bind

如果您正在使用this在那里,你會添加bind到最后:

dbAccess.runCommand(
        'INSERT INTO users (email) values (?); SELECT LAST_INSERT_ID()',
        req.getConnection,
        email
    )
    .then(function result {
        return setProjectPermission(req, res, result.insertId, projectId, permissionLevel);
    }.bind(this)); // <===== `bind` is here

...或使用var _this = this; 並改用_this此問題答案中描述的任何技巧。 但是使用箭頭功能,您不必擔心,它們會關閉 this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM