【问题标题】:Can't create blob out of a simple fetch [duplicate]无法从简单的提取中创建 blob [重复]
【发布时间】:2019-10-10 16:54:31
【问题描述】:

我需要使用来自节点服务器的获取来设置<img> 标记的src 属性。

function fetchPicture(path) {
  fetch(path)
    .then(function(response) {
      return response.blob();
    })
    .then(function(myBlob) {
      return window.URL.CreateObjectURL(myBlob);
    });
}

但是,在处理我的.then(response) 中的承诺时,我得到一个 pathToMyHTMLFile/undefined 的文件未找到异常。

我的路径是 http://localhost:8080/Images/fig3.png 类型,响应的状态是 200

任何提示将不胜感激!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的函数不返回任何内容。您正在从回调函数返回 URL,但这不会自动冒泡。相反,该函数应该返回整个 fetch Promise,然后在调用时异步处理它,例如 fetchPicture('http://url.path.here').then(url => image.src = url) 或类似的。

    【讨论】:

    • 好的,我理解并应用了您的更改和@Emissary,现在它工作正常。如果我理解正确,您不能从.then() 冒泡返回值?
    • 正确。根据定义,其他代码在“同时”运行异步代码的同时继续运行。这意味着函数在获取完成之前继续并结束,因此无法在函数结束之前将回调的返回值获取到函数的范围内。这就是为什么在使用 Promise 时,您通常会返回 Promise 链,然后在需要使用它的值时将另一个处理程序链接到它上面;所以新的处理程序将等到承诺解决后再被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2018-02-03
    • 2021-10-16
    • 2019-03-09
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多