首页 新闻 会员 周边 捐助

js回调函数异步执行问题(在线等急)

0
悬赏园豆:50 [已解决问题] 解决于 2017-01-12 18:46

var beOrNoimgTo = function(baiduurl) {
var du;
AppFrame.Http.Get(baiduurl, function(ret) { //为回调函数
if (ret.status == "402") {
du= "fukeyou";
}
else du= baiduurl;
})

return du;
}

代码是上面这样的

目前的问题是调用beOrNoimgTo 函数,AppFrame.Http.Get函数没执行完就return了。

那么如何让AppFrame.Http.Get执行完了以后再return呢。

js
角色互换的主页 角色互换 | 初学一级 | 园豆:187
提问于:2017-01-12 16:15
< >
分享
最佳答案
0

没法子.简单的法子是你可以在回调里讲结果赋值给beOrNoimgTo ,或者写个

function 干活(beOrNoimgTo ){}

把要做的事情写进去.然后在回调里调用

收获园豆:15
吴瑞祥 | 高人七级 |园豆:29449 | 2017-01-12 16:16

能给了例子吗,这样讲不不是很明白啊,(实现目标,在该函数传参并返回回调函数赋的值)

 

角色互换 | 园豆:187 (初学一级) | 2017-01-12 16:27

@角色互换:我不相信你照我说的做做不出来.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-01-12 17:06
其他回答(4)
0

AppFrame.Http.Get(baiduurl, function(ret) { //为回调函数
if (ret.status == "402") {
du= "fukeyou";

return du;
}
else du= baiduurl;

return du;
})
}

收获园豆:10
让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-12 16:22

试过了这方法返回undefined的 

支持(0) 反对(0) 角色互换 | 园豆:187 (初学一级) | 2017-01-12 16:34

@角色互换: var du 也加上

支持(0) 反对(0) 让我发会呆 | 园豆:2929 (老鸟四级) | 2017-01-12 16:36

@让我发会呆: 加上了 还一样的

支持(0) 反对(0) 角色互换 | 园豆:187 (初学一级) | 2017-01-12 16:40
0

因为网络请求是异步的,在还没有请求到数据时,函数就执行完了。

收获园豆:15
angelshelter | 园豆:9914 (大侠五级) | 2017-01-12 16:50

是呢

支持(0) 反对(0) 角色互换 | 园豆:187 (初学一级) | 2017-01-12 18:05
0

 正常业务逻辑下,这种时候都是在回调函数中执行后续操作。。不是这种返回值的形式,如果非要这么写就写等待时间吧,setTimeout函数。。时间自己设置,时间过了如果有响应就继续,没响应就返回fukeyou。。其实是fuck

收获园豆:10
hucat | 园豆:214 (菜鸟二级) | 2017-01-12 17:13

这不重要,设置时间也不可以的

支持(0) 反对(0) 角色互换 | 园豆:187 (初学一级) | 2017-01-12 18:06
0

 感谢园友们的解答,我深受启发,这个问题已解决了。

废话不多说,上代码

函数:

var beOrNoImg = function(baiduUrl, CB) {
var imgUrl;
AppFrame.Http.Get(baiduUrl, function(ret) {
if (ret.status == "402") {
imgUrl = "";
} else
imgUrl = baiduUrl;
if (CB)
CB(imgUrl);
})
}

调用:

beOrNoImg(picturel, function(imgUrl) {
model.P_Img = imgUrl;
})

解释:

先请求完picturel,然后在回调。这必须在函数里面加

if (CB)
CB(imgUrl)

判断

角色互换 | 园豆:187 (初学一级) | 2017-01-12 18:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册