如何在没有异步的情况下编写异步fetch()?

时间:2019-08-09 07:58:21

标签: javascript promise async-await fetch autohotkey

我有一行代码使用 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。感谢您的回答,一切正常!

2 个答案:

答案 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值处理其余的事情