2017-11-29 16 views
2

まだ.bindの周りに頭を上げようと苦労しています。私が持っている場合は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; 

    ... 

「結果を期待している機能を返さずに行うことが可能です。この'?例えば

答えて

3

それはEC6だった場合、私はこれを行うだろう(と思う)...

( "EC6" => "ES2015" 別名 "ES6")はい、正確に、そしてすべてのアップノードサポートの矢印関数の構文の最新バージョン。だから、

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)); 

あなたはノードのレガシーバージョンで実行する必要がある場合は、あなたはそこでthisbindの必要はありませんを使用していないので

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); 
    }); 

function構文を使用することができます。

あなたはがそこに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 question's answersで説明したトリックのいずれか。しかし、矢印機能を使用すると、それについて心配する必要はありません。が閉じるthisで終わります。

+0

*(奇妙な '()'が表示された場合は、リフレッシュしてください)。* –

関連する問題