无法从Blob获取BinaryString,代码返回undefined但控制台有数据求助
解决Promise导致的返回undefined问题
你这明显是踩了异步Promise的常见坑——你的readBlob函数没返回Promise对象,所以调用它的时候自然拿不到预期结果,哪怕控制台能看到异步操作完成后的数据。
问题根源
你的readBlob里,虽然在then回调里写了return result,但这个return只属于回调函数本身,整个readBlob函数根本没返回任何值,所以默认就返回undefined了。而blobUtil.blobToBinaryString本身是会返回Promise的,你得把这个Promise返回出去,才能在外部获取异步结果。
修正后的代码
先把readBlob函数改对,让它返回Promise链:
var blobUtil = require('blob-util'); var mystring = "Hello World!"; var myblob = new Blob([mystring], { type: 'text/plain' }); this.BlobData(myblob); // 修正:返回blobUtil的Promise function readBlob(blob) { // 其实这里的then可以省略,直接返回原Promise就行 return blobUtil.blobToBinaryString(blob); }; // 用Promise回调处理结果 function BlobData(blob) { readBlob(blob) .then(function(result) { console.log(result); // 这里就能拿到"Hello World!"了 // 在这里处理你的数据,别试图同步获取返回值 }) .catch(function(error) { console.error('读取Blob失败:', error); }); };
更清爽的async/await写法
如果你习惯同步风格的代码,可以用async/await来处理异步操作:
var blobUtil = require('blob-util'); var mystring = "Hello World!"; var myblob = new Blob([mystring], { type: 'text/plain' }); this.BlobData(myblob); function readBlob(blob) { return blobUtil.blobToBinaryString(blob); }; // 用async标记函数,内部用await等待Promise完成 async function BlobData(blob) { try { const result = await readBlob(blob); console.log(result); // 直接拿到结果 // 后续业务逻辑写这里 } catch (error) { console.error('读取Blob失败:', error); } };
关键提醒
Promise是异步操作的容器,不能像调用同步函数那样直接var data = readBlob(blob)获取结果——异步操作还没完成的时候,函数就已经返回了。必须通过then回调或者await(配合async函数)来等异步操作做完,才能拿到最终的数据。
内容的提问来源于stack exchange,提问作者Nelson Silva
相关产品推荐
相关产品推荐

