异步匿名函数怎么return

发布于 2022-09-07 22:30:31 字数 1630 浏览 10 评论 0

问题描述

使用vue axios库进行http请求
在这个请求拦截器里 axios.interceptors.request.use 去进行跟ios通信获取一些手机设备信息参数最后再去发起请求 return config;
但是跟ios通信是异步的 return config的时候还没能获取到ios的响应

相关代码

axios.interceptors.request.use(config => {
    // 调用ios方法 填充公共参数
    window.__nativeFn("js_getAllDeviceInfo", {
        // ios的响应结果
        response: r => {
            config.data = Object.assign(config.data, r.data)
        }
    })
    return config

}, error => {
    return Promise.reject(error);
});

尝试1、采用定时器来看ios是否响应(未实现需求 在定时器里也无法return config,再定时器里调用回调函数 也不知道怎么return给他axios.interceptors.request.use)

axios.interceptors.request.use(config => {
    // 调用ios方法 填充公共参数
    window.a = false
    window.__nativeFn("js_getAllDeviceInfo", {
        // ios的响应结果
        response: r => {
            config.data = Object.assign(config.data, r.data)
            window.a = true
        }
    })
    var i = 0
    let SI = setInterval(() => {
        i++
        // 如果5秒之内ios端还没有响应 清除定时器
        if(5000 <= i) {
            clearInterval(SI)
        }
        if(window.a) {
            clearInterval(SI)
            return config
        }
    })

}, error => {
    return Promise.reject(error);
});

尝试2 采用@yuanxiaowa 的方法 发起了2个api请求 第二个api请求没发出 打印的config 始终是第一个请求的相关信息

return new Promise(resolve => {
   // 调用ios方法 填充公共参数
   window.__nativeFn("js_getAllDeviceInfo", {
   // ios的响应结果
   response: r => {
      config.data = Object.assign(config.data, r.data)
      console.log(config)
      resolve(config)
     }
   })
})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

庆幸我还是我 2022-09-14 22:30:31
axios.interceptors.request.use(config => {
    return new Promise(resolve => {
        // 调用ios方法 填充公共参数
        window.__nativeFn("js_getAllDeviceInfo", {
            // ios的响应结果
            response: r => {
                config.data = Object.assign(config.data, r.data)
                resolve(config)
            }
        })
    })

}, error => {
    return Promise.reject(error);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文