You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:02:44