我正在 Node.js 8.4.0 上调试 async/await
代码。版本 #1 按预期工作,打印“OK”,但版本 #2 随机崩溃(至少每 10 次运行一次左右),并出现以下错误
libc++abi.dylib: Pure virtual function called!
Abort trap: 6
或
Segmentation fault: 11
这是我的代码:
var sass = require('node-sass')
var fs = require('fs')
var scss = '@import "foo";'
// Helper function that reads a given file, returning a promise
function readFilePromise(filename) {
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, buf) => {
if(err) {
console.log("ERROR", err)
reject(err)
} else {
resolve(buf)
}
})
})
}
// #1 Pass a normal callback that uses a promise - works as expected.
sass.render({
data: scss,
importer: (url, prev, done) => {
readFilePromise(__filename).then((contents) => {
done({ contents: '' })
})
},
}, function(err, result) {
console.log(err ? err : "OK")
})
// #2 Pass async function - crashes.
sass.render({
data: scss,
importer: async (url, prev, done) => {
var contents = await readFilePromise(__filename)
done({ contents: '' })
},
}, function(err, result) {
console.log(err ? err : "OK")
})
我的问题:这是 Node.js 的错误吗?萨斯错误?还是我做错了什么?
环境:MacOs Sierra 上的 Node.js 8.4、node-sass 4.5.3。
最佳答案
您确定node-sass
期望importer
方法返回promise吗?因为这就是async
函数的作用。基于node-sass docs看来该库仅适用于 importer
的回调或同步实现。您的实现立即返回 Promise,并且库认为这是从同步版本返回的,并尝试继续使用 Promise 本身(而不是其解析值)进行工作。
关于javascript - 将 async/await 回调传递给 sass (C++) 会随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46116934/