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

2021-03-09 17:02:02 +08:00
 RickyC

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

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

3324 次点击
所在节点    JavaScript
42 条回复
muzuiget
2021-03-09 17:47:53 +08:00
楼上好几个人说了,要么 promise,要么 callback,楼主还是无视,基础知识不过关,没有异步的概念。
Rhilip
2021-03-09 18:05:09 +08:00
async/await 最适合了,反正 jQuery 的 ajax 也是支持 await 的。
zhengwenk
2021-03-09 18:08:45 +08:00
既然用了异步就按异步的写法来啊,返回值又是同步的,这不是矛盾么。
回旋标扔出去以后你手就空了。
zhuweiyou
2021-03-09 18:15:16 +08:00
function verify( callback ){

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

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

}
}
})
}

用的时候

verify(ret => {
console.log(ret)
})
wgbx
2021-03-09 18:19:14 +08:00
24 是标答啊,大家一直在说 promise 和 async,后面又会引出 babel,webpack,cli,node,无穷无尽了
mmlmml1
2021-03-09 18:25:48 +08:00
jQuery 自带同步支持,真要同步的话可以直接 return $.post(...)
mmlmml1
2021-03-09 18:26:36 +08:00
参数里面带上 async: false 即可
Building
2021-03-09 18:27:10 +08:00
这种问题...有答的必要吗?
zlu1123
2021-03-09 19:09:04 +08:00
使用回调啊,在 success 里面判断 callBack && callBack(res)
Ice7173
2021-03-09 19:22:17 +08:00
在成功函数里做 callback,用 callback&&callback ( res ),或者 return 一个 promise,用.then()接参,这样就不会导致异步操作了,asnyc 其实也不好
oott123
2021-03-09 20:19:42 +08:00
@imdong 这个场景下,死循环等待是没有用的。

单线程模型下,死循环会导致回调永远得不到执行。
autoxbc
2021-03-09 21:16:59 +08:00
@wgbx #25 时代变了,promise 和 async 已经是原生特性,和后面那些完全不同
en20
2021-03-09 23:14:09 +08:00
@Building 大家都是从新手过来的,如果当初能有人帮助我真的会很感激.
Shook
2021-03-09 23:39:22 +08:00
1. async/await
2. callback
rencoo
2021-03-09 23:54:18 +08:00
$.post('api.php', {code: 222})
.success((data) => {
// 在这里赋值
});
meepo3927
2021-03-10 08:56:46 +08:00
函数里直接 return $.post(...)

然后外面直接 .then()

习惯异步
Reapper
2021-03-10 09:03:27 +08:00
不想用 async 同步到话,老办法只能 callback 一下啦,新方法就是 promise 啦!
function verify(callback){
$.post('','',function(){
typeof callback === 'function' && callback()
})
}
wednesdayco
2021-03-10 10:34:16 +08:00
这题这题是刚学 JavaScript 么……父级这个词用的也蛮灵性……但这种的也还是更推荐 Promise 封装
no1xsyzy
2021-03-10 11:00:12 +08:00
得理解 JavaScript 的纯异步思想
一旦进入异步,你可以指望从现在开始 2000 年以后才会得到结果。
PEAL
2021-03-10 11:20:15 +08:00
函数增加 callback 参数啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/760049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX