Node 9.5.0中_util.default.promisify不是函数问题求助
问题根源与解决方案
嘿,我一眼就看出问题所在了——util是Node.js的核心内置模块,浏览器环境里根本没有这个东西!
你本地Node v9.5.0确实支持util.promisify,但那是在Node.js的服务端/本地运行环境里生效的。浏览器有自己的JS运行环境,没有内置Node的核心API,所以不管你怎么调整导入写法,都会报错找不到promisify方法——因为连util模块本身都不存在于浏览器里。
给你几个可行的解决思路:
自己实现简易版promisify:既然只是要把回调风格的方法转成Promise,写个小函数就能搞定,不用依赖Node的util模块:
function promisify(callbackFn) { return function(...args) { return new Promise((resolve, reject) => { callbackFn(...args, (error, result) => { if (error) reject(error); else resolve(result); }); }); }; } // 接着用这个函数处理fingerprint.get const Fingerprint = promisify(fingerprint.get);检查fingerprint2是否自带Promise支持:很多前端库现在都会提供Promise风格的API,你可以去看看fingerprint2的文档,有没有直接返回Promise的方法,如果有的话直接用就行,省得自己转。
用打包工具引入polyfill:如果你非要用Node风格的
util.promisify,可以通过Webpack、Rollup这类打包工具,安装浏览器兼容的utilnpm包,或者在Babel配置里添加相关polyfill,把Node的util模块打包到你的前端代码里。
记住哦,Node.js环境和浏览器环境是完全独立的,Node的核心模块大多不能直接在浏览器里用,遇到这种跨环境的API问题,先想想是不是环境不兼容导致的~
内容的提问来源于stack exchange,提问作者BugHunterUK
相关产品推荐
相关产品推荐

