我正在将用 Node v6.10 编写的代码库迁移到 v10.15.3,
我希望使用 async/await 样式和 util 库来避免我的代码所具有的回调地狱,
我能够将函数转换为新的 async/ await 样式并使用 util 库功能。
有人强烈建议我将 .bind 函数链接到 util.promisify()函数,
我知道 .bind() 用于变量/对象范围。
但是真的有必要在使用 util lib 进行承诺后进行 .bind 吗?
以下是我的示例代码 -
let fs = require('fs');
let util = require('util');
let test = async () => {
let keyPath = 'someFile.txt';
//This works
const fsReadFile = util.promisify(fs.readFile);
//This also works
//const fsReadFile = util.promisify(fs.readFile).bind(this);
//This also works
//const fsReadFile = util.promisify(fs.readFile).bind(fs);
var fileContent = await fsReadFile(keyPath, 'utf8');
console.log(fileContent);
};
test();
Run Code Online (Sandbox Code Playgroud)
我遵循以下网站进行实施 -
1. util 实现 -
https://medium.com/@suyashmohan/util-promisify-in-node-js-v8-d07ef4ea8c53
2. 了解绑定函数 -
a) https://blog.cloudboost.io/nodejs-bind-function-e5d33ea081f0
b) JavaScript 'bind' 方法的使用
不确定是否有用例 -
1. https://github.com/nodejs/node/issues/13338
2.函数有效,但在使用 util.promisify() 时失败?
util.promisify没有绑定参数。因此,如果您需要绑定上下文,请执行以下操作:
const run = util.promisify(thing.run).bind(thing);
Run Code Online (Sandbox Code Playgroud)
不,在这种情况下不需要。如果您查看 readFile 实现,它this在任何时候都不会使用:
https://github.com/nodejs/node/blob/master/lib/fs.js#L283
这意味着如果该函数丢失其原始上下文(fs 模块)或已绑定,该函数将起作用,这并不重要。这就是为什么您发布的所有示例都可以正常工作的原因。
然而,有许多库依赖于其this上下文,因此它们需要绑定。如果有人建议你绑定所有内容,他/她可能对 javascript 的工作原理没有太多了解,他们只是更喜欢绑定所有内容,因为如果不需要的话,它不会造成太大影响(只是一个小的性能影响,这不是在任何情况下都很明显)。
我的建议是单独调查每种情况或使用原生使用 Promise 的库。
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |