跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • js 的回调如何给父级赋值?
未分類
26 3 月 2021

js 的回调如何给父级赋值?

js 的回调如何给父级赋值?

資深大佬 : RickyC 7

如

function verify(){     var ret = false          $.post('api.php',      {code: 222},               function(res){         if(res.code === 200){                              //这样赋值是无效的              ret = res.data.ret             }      }     })  return ret   } 

众所周知 jQuery 已经弃用了 async 参数,所以怎么搞?

大佬有話說 (42)

  • 資深大佬 : chenluo0429

    赋值显然是有效的,只是你 return 时,ret 还没有被赋值

  • 資深大佬 : foolnius

    请求是异步操作,异步还没触发回调就直接返回了

  • 資深大佬 : kaiki

    ajax 是异步的,你应该把 return 写在赋值后
    你多加点 console.log 调试下就知道了

  • 資深大佬 : ayase252

    return promise
    外面 .then

  • 主 資深大佬 : RickyC

    @kaiki 赋值是在回调里的,
    回调里不能给父级 return 吧?

  • 主 資深大佬 : RickyC

    @chenluo0429 对呀,怎么解决

  • 資深大佬 : toma77

    setTimeout 包一下 return

  • 資深大佬 : sannyzeng

    用 4 的方法,没问题啊

  • 資深大佬 : wangxiaoaer

    一句话,现在的 verify 是同步函数里面调用了异步方法,所以得不到内部异步的处理结果。

    解决办法是:verify 增加一个 callback 参数,内部的异步过程完成再触发这个 callback

  • 資深大佬 : imdong

    想起来前几天群里聊到的面试题,类似的情况说不添加新的 fun 的情况下如何实现返回;

    答案:

    if 死循环等待

    很傻,但这样的构架只能这么搞,除非你能改变外面的调用方式

    比如回调,或者 Promise

  • 資深大佬 : ytxbnahn

    async: false

  • 資深大佬 : Jirajine

    你的请求是异步的,所以你的 verify()函数也得是异步的。
    可以用 async 、Promise,也可以用 callback 。

  • 資深大佬 : ytxbnahn

    对不起 看错了

  • 資深大佬 : justin2018

    javascript – How do I return the response from an asynchronous call? – Stack Overflow
    https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call

  • 資深大佬 : Vegetable

    问就是回调地狱啊

  • 資深大佬 : sun2920989

    使用 async/await 的好时机.

  • 資深大佬 : eason1874

    赋值是有效的,但是 $.post 是异步的,没等响应 JS 就执行到下面的 return ret 了

    你可以你需要调用 verify() 结果的代码写成函数,在响应回调里调用。比如函数名 update_verify,update_verify(res.data.ret)

  • 資深大佬 : chenluo0429

    1. promise 包装一层
    2. verify 接受一个 callback 函数作为参数,让 callback 来接收 ret

  • 主 資深大佬 : RickyC

    @toma77 我想到的也是这个。不知道有什么优雅的方法吗

  • 資深大佬 : eason1874

    @RickyC #19 优雅的方法就是回调啊,callback,很多人都说了。没必要用定时器

  • 資深大佬 : muzuiget

    上好几个人说了,要么 promise,要么 callback,主还是无视,基础知识不过关,没有异步的概念。

  • 資深大佬 : Rhilip

    async/await 最适合了,反正 jQuery 的 ajax 也是支持 await 的。

  • 資深大佬 : zhengwenk

    既然用了异步就按异步的写法来啊,返回值又是同步的,这不是矛盾么。
    回旋标扔出去以后你手就空了。

  • 資深大佬 : zhuweiyou

    function verify( callback ){

    $.post(‘api.php’,
    {code: 222},

    function(res){
    if(res.code === 200){
    callback( res.data.ret )

    }
    }
    })
    }

    用的时候

    verify(ret => {
    console.log(ret)
    })

  • 資深大佬 : wgbx

    24 是标答啊,大家一直在说 promise 和 async,后面又会引出 babel,webpack,cli,node,无穷无尽了

  • 資深大佬 : mmlmml1

    jQuery 自带同步支持,真要同步的话可以直接 return $.post(…)

  • 資深大佬 : mmlmml1

    参数里面带上 async: false 即可

  • 資深大佬 : Building

    这种问题…有答的必要吗?

  • 資深大佬 : zlu1123

    使用回调啊,在 success 里面判断 callBack && callBack(res)

  • 資深大佬 : Ice7173

    在成功函数里做 callback,用 callback&&callback ( res ),或者 return 一个 promise,用.then()接参,这样就不会导致异步操作了,asnyc 其实也不好

  • 資深大佬 : oott123

    @imdong 这个场景下,死循环等待是没有用的。

    单线程模型下,死循环会导致回调永远得不到执行。

  • 資深大佬 : autoxbc

    @wgbx #25 时代变了,promise 和 async 已经是原生特性,和后面那些完全不同

  • 資深大佬 : en20

    @Building 大家都是从新手过来的,如果当初能有人帮助我真的会很感激.

  • 資深大佬 : Shook

    1. async/await
    2. callback

  • 資深大佬 : rencoo

    $.post(‘api.php’, {code: 222})
    .success((data) => {
    // 在这里赋值
    });

  • 資深大佬 : meepo3927

    函数里直接 return $.post(…)

    然后外面直接 .then()

    习惯异步

  • 資深大佬 : Reapper

    不想用 async 同步到话,老办法只能 callback 一下啦,新方法就是 promise 啦!
    function verify(callback){
    $.post(”,”,function(){
    typeof callback === ‘function’ && callback()
    })
    }

  • 資深大佬 : wednesdayco

    这题这题是刚学 JavaScript 么……父级这个词用的也蛮灵性……但这种的也还是更推荐 Promise 封装

  • 資深大佬 : no1xsyzy

    得理解 JavaScript 的纯异步思想
    一旦进入异步,你可以指望从现在开始 2000 年以后才会得到结果。

  • 資深大佬 : PEAL

    函数增加 callback 参数啊

  • 資深大佬 : jorneyr

    回调函数或者 Promise 吧

  • 資深大佬 : lemon6

    参考下 24 的回答

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具