此选项之一是否有一些优点?
1.
const fs = require('fs')
const testFunc1 = async () => {
fs.writeFileSync('text.txt', 'hello world')
}
Run Code Online (Sandbox Code Playgroud)
2.
const fs = require('fs')
const util = require('util')
const writeFilePromisified = util.promisify(fs.writeFile)
const testFunc2 = async () => {
await writeFilePromisified('text.txt', 'hello world')
}
Run Code Online (Sandbox Code Playgroud)
我知道 writeFile 和 writeFileSync 之间的区别。问题是返回 testFunc1 和 testFunc2 的承诺之间是否存在一些差异。所以它与调用 testFunc1.then(...) // 或 await testFunc1 或 testFunc2.then(...) // 或 await testFunc2 是一样的
当文件写入完成时,这两个承诺都将被完成。
fs已经包含promisified API不需要promisify。
基于承诺的异步版本需要将其用作基于承诺的控制流的一部分,而同步版本不强加此要求。
异步readFile/writeFile是非阻塞的,而同步readFileSync/writeFileSync是阻塞的,但可以更快地完成工作。这在密集的 IO 操作期间可能会很明显。
为了说明两个返回函数的 promise 之间的区别:
const fs = require('fs')
const util = require('util')
const testFunc1 = async () => {
fs.writeFileSync('text.txt', 'hello world')
console.log('file write done with writeFileSync')
}
const writeFilePromisified = util.promisify(fs.writeFile)
const testFunc2 = async () => {
await writeFilePromisified('text.txt', 'hello world')
console.log('file write done with promisified writeFile')
}
console.log('start test1')
testFunc1().then(() => {
console.log('promise 1 is fullfiled')
})
console.log('start test2')
testFunc2().then(() => {
console.log('promise 2 is fullfiled')
})
console.log('stop')
Run Code Online (Sandbox Code Playgroud)
输出将是:
start test1
file write done with writeFileSync
start test2
stop
promise 1 is fullfiled
file write done with promisified writeFile
promise 2 is fullfiled
Run Code Online (Sandbox Code Playgroud)
所以就像estus所说的testFunc1阻塞了主线程的执行。testFunc2 不会阻塞。
| 归档时间: |
|
| 查看次数: |
13566 次 |
| 最近记录: |