收藏
回答

如何正确的等待异步回调函数的返回值?

新手上路,问题可能很蠢,还请大佬们不吝赐教。

html是包含图片和文本的字符串,其中图片是临时地址,我想要在replace中获得临时地址,每次获得一个临时地址的同时将图片上传到云存储,然后将返回的fileID添加进一个数组,最后用这个数组遍历依次替换临时地址。

我现在的问题是,我不知道怎么才能让replace每次替换都等待上传图片的返回值,图片虽然上传成功了,但是数组依旧是空的。

尝试使用了async/await,也不知道是不是用错了,总之问题没有解决。

回答关注问题邀请回答
收藏

1 个回答

  • 金煜峰
    金煜峰
    2022-03-11

    replace 是同步方法,无法 await 的,可以这样

    const promises = []
    html.replace(reg, (match, capture) => {
      promises.push(uploadImg(capture, sendtype))
    })
    const data = await Promise.all(promises)
    html = html.replace(reg, () => data.shift().fileId)
    
    2022-03-11
    有用 1
    回复 7
    • 次元突破者901
      次元突破者901
      2022-03-11
      多谢大佬!解决了!大佬牛逼!!!
      2022-03-11
      回复
    • 次元突破者901
      次元突破者901
      2022-03-11
      不对哥,还没解决。。。data和promises里面是空的。。
      2022-03-11
      回复
    • 次元突破者901
      次元突破者901
      2022-03-11回复次元突破者901
      大哥再救我一次!
      2022-03-11
      回复
    • 金煜峰
      金煜峰
      2022-03-11回复次元突破者901
      正则表达式写对了吗?空的说明没匹配到咯
      2022-03-11
      回复
    • 次元突破者901
      次元突破者901
      发表于移动端
      2022-03-11回复金煜峰
      正则没有改,用的还是图里这个,上传步骤里能正常打印出返回值,执行顺序是没有问题了,但是data里是undefined,数组里每张图片是一个object promise
      2022-03-11
      回复
    查看更多(2)
登录 后发表内容