-2

我只是好奇如何以不同的方式做到这一点。现在我已经创建了一行没有分号或新行的代码。我想明确一点,这根本没有任何错误。该代码创建一个由<h1>Example</h1>. 这包含在一个承诺中,因此我可以访问结果。得到结果后,我使用&&运算符来避免使用分号。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,有点让你倒退。我做了一些编辑。此功能通过以下方式工作:

  • <h1>Example</h1>
  • 它通过做两件事的 IIFE 运行 URL
    • 打开网址
    • 为要加载的窗口设置事件侦听器,然后撤消 URL
((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'})))
4

1 回答 1

0

当您只需要一个IIFE 来引入变量时,就没有理由使用 Promise :

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

(对不起,可读的格式。删除你认为合适的空格。)

于 2021-01-04T10:56:03.723 回答