关于 JS 前端的一个疑问(涉及 Blob)

2018-11-14 19:42:02 +08:00
 McContax

这几天在 Github 找到了一个在浏览器压缩图片的 JS 脚本
我是 GitHub 链接
现在下到本地开始建个简单的 Demo,但是遇到了这样一个问题

result 是压缩之后的图片以 Blob 的形式返回,但是将代码写入到 html 文件之后就没办法读取到 result,如果将 JS 代码一条一条在 chrome 的控制台输入运行却可以获取 result,并且很奇怪 Compressor 里面能看到 result 是一个 Blob 但是在 Compressor 的梗概那里却是显示着一个 null

2001 次点击
所在节点    问与答
10 条回复
Jex
2018-11-14 19:50:09 +08:00
因为它是异步的,你为什么不看文档?
morethansean
2018-11-14 19:59:48 +08:00
@Jex 这感觉是连 demo 都没看么 23333
IsaacYoung
2018-11-14 20:00:08 +08:00
看见右边那个 info 的蓝色小图标了? 把鼠标放上去 看看提示是什么
McContax
2018-11-14 20:28:46 +08:00
@IsaacYoung 显示 value below was evaluated just now,现在正在 Google 搜索 ing

@Jex
@morethansean 不是职业前端开发啦,这些事情也是第一次遇到,不好意思啦~
rbe
2018-11-14 20:34:35 +08:00
浏览器的 console 是异步求值的,不是做前端的确实很可能不知道,楼上不用这么苛责吧?
azh7138m
2018-11-14 20:40:19 +08:00
@rbe 1 楼说的是那个库是异步处理的
做题前要认真读题
McContax
2018-11-14 20:44:04 +08:00
@rbe
@IsaacYoung 请问有什么办法能够直接访问到重新计算之后的 result 吗?我 Google 了一下有说 JSON.stringify 有说 JSON.parse(obj),但是这两个没办法做到。。
IsaacYoung
2018-11-14 21:00:28 +08:00
@McContax 你看 readme 啊 里面不是有 G 个例子 设置了 success callback,回调函数里面就能拿到数据
McContax
2018-11-14 21:27:46 +08:00
@IsaacYoung 非常感谢,我当时看文档的时候只留意 option 里面的 height,width 之类的参数变量,完全没留意到设置了 success 函数,而且刚才思路也偏了,现在能够正常运行了,谢谢
rbe
2018-11-14 22:35:43 +08:00
浏览器 console 对于一个 obj 是异步求值的,obj 结构复杂的话就无法一次打出来,而 console.log(JSON.stringify(obj)) 相当于把一个对象序列化成字符串再打出来,所以能够达到效果,这个过程是同步的。但是你调用这个库是异步处理你要压缩的东西的,这里用了回调的模式,所以在成功和失败的回调里处理逻辑就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507884

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX