关于ajax 异步取值 的问题

cpp_1 2020-11-22 01:09:10
我在JS里面,我发现异步数据取回的慢,造成后面JS先于取值 之前执行了,我的abc在后面JS操作的时候一直是空的

除了把async:false 改成同步以外,还有什么办法,可以在异步的情况下,修正这个问题呢

var abc="";


url:'URL',
dataType:'json',
type:'post',
//async:false,
success:function(data){
.............
}
});


abc=XXXXXX一系类操作

...全文
6714 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小国图志 2020-11-23
  • 打赏
  • 举报
回复
如果需要效率,就不应该写在异步
qq_291778271 2020-11-23
  • 打赏
  • 举报
回复
setTimeout()
苏颙 2020-11-22
  • 打赏
  • 举报
回复
成功之后再执行后续操作
亦夜 2020-11-22
  • 打赏
  • 举报
回复
1、将后续操作放到成功回调函数中,但是和改成同步没什么区别 2、定义一个标识,在成功回调中修改这个标识,后续判断成功之后才执行后面的逻辑 3、将后面的代码用setTimeout包裹
qybao 2020-11-22
  • 打赏
  • 举报
回复
abc=XXX的处理写到异步方法里,比如 如abc=await xxx 然后xxx用async的方式调用ajax获取数据
韩_师兄 2020-11-22
  • 打赏
  • 举报
回复
一楼的,比较常见的处理,见得一般也是的.
泡泡鱼_ 2020-11-22
  • 打赏
  • 举报
回复
不想改为同步的话,当然是和异步操作结果相关的操作都放在异步获取结果之后一起操作。 当然你也可以用async/awit来进行处理。就可以在业务流程上达到“同步处理”的结果

async function getData() {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: 'URL',
            dataType: 'json',
            type: 'post',
            success: function(data) {
                resolve(data)
            },
            error: function(err) {
                //$.ajax的error应该是默认有好几个值可用的,你可以按需reject
                reject(err)
            }
        })
    })
};

async function fn() {
    try {
        let data = await getData();
        console.log(data);
    } catch(err) {
        console.log(err);

    }
}

fn();
最后:不建议定义标识,一来业务逻辑不清晰,二来不可能为了这么个明明可以处理得很好的目标,却硬生生的用个计时器去做类轮循操作
大叔obnijeh 2020-11-22
  • 打赏
  • 举报
回复
对,同意1楼,定义一个标识,在成功回调中修改这个标识,后续判断成功之后才执行后面的逻辑。哪怕是重调用或是设置超时,都要判断是否有返回值。才往下执行。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧