javascript - 将 async/await 回调传递给 sass (C++) 会随机崩溃

标签 javascript node.js sass async-await

我正在 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/

相关文章:

javascript - ReactJS 上的 Material UI : `evt.target.value` not working for `RaisedButton`

javascript - 将文件内容传递给函数,而不是下载文件

javascript - NodeJS - readline 暂停和恢复事件发射器(逐行读取)

javascript - 在打开侧抽屉窗口跳到 html css 中的高度零

html - 具有相同 id 的 div 不显示相同的高度

javascript - 将 onclick 绑定(bind)到循环中的节点

javascript - 相当于 gmaps api 3 中的 getBoundsZoomLevel()

Javascript 焦点丢失

php - 从php远程服务器 Node js POST获取响应

node.js - @import 'X' 媒体查询表达式必须以 '(' 开头对于带有 gatsby 的 sass 文件没有意义