在一行 JavaScript 中创建 blob URL 后撤销它

Revoking blob URL after Creating it in a single line JavaScript

我只是想知道如何以不同的方式做到这一点。现在我已经创建了一行代码,其中包含 NO 分号或新行。我想说清楚,这根本没有任何错误。该代码创建了一个由 <h1>Example</h1> 组成的 HTML blob。这包含在承诺中,因此我可以访问结果。得到结果后,我使用 && 运算符来避免使用分号。 blob url 立即打开,然后在 2000 毫秒后撤销。如果您有解决方案可以缩短此时间或在没有 ; 或换行的情况下以不同方式完成,请通知我 :)

new Promise(r=>r(URL.createObjectURL(new Blob(['<h1>Example</h1>'],{type:'text/html'})))).then(u=>{window.open(u)&&setTimeout(t=>URL.revokeObjectURL(u)),2000})

我想说清楚,这是关于语法的。

编辑:

事实证明,感谢@Bergi,这很容易通过 IIFE 实现。使用 IIFE,有点让你向后思考。我做了一些编辑。此函数的工作原理是:

((u,e=open(u))=>e.onload=_=>URL.revokeObjectURL(u))(URL.createObjectURL(new Blob(['<h1>Example</h1>'],{type:'text/html'})))

编辑(不需要 e):

(u=>open(u).onload=_=>URL.revokeObjectURL(u))(URL.createObjectURL(new Blob(['<h1>Example</h1>'],{type:'text/html'})))

当你只需要 IIFE to introduce variables:

时,没有理由使用承诺
(u => (
  window.open(u),
  setTimeout(_ =>
    URL.revokeObjectURL(u))
  , 2000)
))(URL.createObjectURL(
  new Blob(['<h1>Example</h1>'],{type:'text/html'})
))

(对于可读格式感到抱歉。删除您认为合适的空格。)