我有一行代码使用 await fetch()。我正在使用一些调用 eval(“ await fetch ... etc ...”)的脚本注入,但是问题是 await 在启动时不会消失从 eval()调用。
因此,目标是使用 await 仅不用重写这一行。该怎么做?
( await fetch( ff_url, ff_params ) )
.json()
.then( data => window.items_list = data.items );
更新:此代码与AutoHotkey一起使用。无需将行分为两部分(在JavaScript或AutoHotkey中均未拆分)来检查是否已完成提取,因为在我的情况下(AutoHotkey + JS),我认为定期验证window.items_list是否有值还是仍然更简单未定义:D
P.S。感谢您的回答,一切正常!
答案 0 :(得分:2)
如果问题仅在于您无法标记方法async
,则标准的Promise语法可以:
fetch(ff_url, ff_params)
.then(x => x.json())
.then(data => window.myvariable = data.items);
当然,您仍然应该确保调用方异步调用此方法并适当地处理结果(除非需要“开火”和“忘记”)。
答案 1 :(得分:0)
如果要强制功能同步运行,可以使用sync-rpc
模块。这是一个方便的片段,用于强制基于异步承诺的库/函数同步运行。
这可以通过使用child_process
生成spawnSync
来实现。
const forceSync = require('sync-rpc')
const syncFunction = forceSync(require.resolve('./async-thing'))
// inside your thing that needs to be sync (for whatever reason)
const paramOne = 'foo'
const paramTwo = 'bar'
console.log('start')
const syncReturn = syncFunction(paramOne, paramTwo)
console.log('syncReturn', syncReturn)
// result after 2 seconds
// { one: `foo-value`, two: `bar-value` }
//用syncReturn
值处理其余的事情