[英]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.