回调函数里的变量作为外层函数返回值的问题

学艺不精焦头烂额
代码是多层回调的

期望得到函数c里的arr作为函数A的返回值,但是因为异步的原因,会先执行return语句,返回undefined

var arr=[];
let A = ()=>{
    //逻辑处理
     B(function(){

            C(function(){

                 let a = 10;
                 arr.push(a);

            })


    })
    return arr

}

 let data = A();

希望各位大大不吝赐教,在此谢过了

3个回答

已用promise和async解决
let A =>(){
return new Promise(resolve,reject)=>{

B(function(){
resolve(所需的变量);
}).then((res)=>{

return new Promise((resolve,reject)=>{
res.C(function(){
//逻辑处理
resolve(arr)

       })

})
})
}
}

let D=> async (){
let value = await A()
console.log(value)

}

需要一层一层的向上回调,任何一层都不能用return返回

var arr=[];
let A = (f)=>{
    //逻辑处理
    function B(function(){

            function C(function(){

                 let a = 10;
                 arr.push(a);
                 f(arr)
            })
    })
}
A(function (n) {
    let data = n;
});

qq_29036809
起风了9527 感谢回答,虽然和我预想的期望不大一样,到最后arr还是进到了a的回调函数里面,原意是想拿出来处理
一年多之前 回复

楼主立即执行函数没写对,改成下面:

var arr=[];
let A = ()=>{
    //逻辑处理
     (function B (){

            (function C (){

                 let a = 10;
                 arr.push(a);

            })()


    })()
    return arr

}

 let data = A();

本人最近建立了开源项目usuallyjs,非常欢迎楼主一起交流,github地址:https://github.com/JofunLiang/usuallyjs,别忘了start哦.

weixin_41049777
倔强的小石头-jofun 回复起风了9527: 哦,估计你的arr也不是全局变量吧。这样你只能在每个函数里都return。以后贴代码注意点,把每个函数都拆出来
一年多之前 回复
qq_29036809
起风了9527 不是立即执行函数,是函数B里加了回调函数,已start
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

NodeJS的回调函数中的变量怎么在回调函数外使用

例如fs的readFile方法: fs.readFile(filename, [options], callback) 其中读取出来的数据是存在回调函数的参数data中,可是我想在回调函数外,使用读取出的数据,该怎么写? 我刚开始学,纯小白,各位大神写详细点儿,谢谢!

JQuery回调函数内变量赋值问题

``` <html> <head> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script> getImgWH("http://lailailailai.yungler.com/196/media/img/9efa87c0f465288e.jpg"); function getImgWH(path) { var realwidth; $("<img/>").attr("src", path).load(function() { realwidth = this.width; alert(realwidth); //160 }); alert(realwidth); //undefined } </script> <head> <body></body> </html> ``` 代码如上,在回调函数内,可以正常给realwidth赋值,但是出了回调函数之后realwidth的值就变成了undefined,求解要怎么才能获取到realwidth。

请教下各位,java回调函数,返回值等等

比如像IM即时通讯开发,如果用别人的SDK,需要特别关注接口,回调函数和返回值 想请教下各位,UI层对这些接口,回调函数,以及返回值是如何利用的。 有实际的例子说明,如何利用的吗? 感谢各位。

快应用问题:怎么将回调函数中的返回值赋给外部变量?

我是这样写的,但是赋值不上,仍然为空,请教一下 ``` onReady() { let len = this.markers.length + 1 this.watchHeight = len > 3 ? '450' : len*150+'' const that = this prompt.showToast({ message: '请稍后,加载中...' }) device.getUserId({ success (res){ that.userId = res.userId }, fail (data, code) { prompt.showToast({ message: '出错了!错误码为:'+code }) } }) prompt.showDialog({ message: that.userId }) } ```

tkinter想要获得控件回调函数的返回值

tkinter想要获得控件回调函数的返回值,用了global变量,但必须关闭窗口,可以不关窗口继续在窗口中使用吗? ``` import tkinter as tk from tkinter import ttk root = tk.Tk() def Tj_go(*args): global Tj_num Tj_num = int(Tj_numberChosen.get()) return Tj_num Tj_number = tk.StringVar() Tj_numberChosen = ttk.Combobox(root, width=6, textvariable=Tj_number) Tj_numberChosen['values'] = (1, 2, 3, 4) Tj_numberChosen.grid(row=4, column=2) Tj_numberChosen.current(0) Tj_num = 1 Tj_numberChosen.bind("<<ComboboxSelected>>",Tj_go) root.mainloop() ``` 想把用户选择后的Tj_num的值返回到全局,后面还需要用

C++带有回调函数的函数传参问题

``` template<class T> void BinaryTree<T>::InOrder(void(*vist)(BinTreeNode<T>*tr)) { if (root) { InOrder(root->leftChild, vist); vist(root); InOrder(root->rightChild, vist); } } ``` 其中root是私有成员变量,其类型为BinTreeNode<T>*,为什么第4和第6行不报错,InOrder函数参数表里只有回调函数没有BinTreeNode<T>*啊。 ![编译结果](https://img-ask.csdn.net/upload/201810/19/1539951768_47619.png)

怎么获取回调函数中的值

``` loadData: function (func) { var _this = this; var db = dbUtil.prepareDatabase(); db.transaction(function (context) { context.executeSql('select * from tb_hetong', [], function (ts, data) { console.log(data); if (data && data.rows && data.rows.length) { for (var i = 0; i < data.rows.length; i++) { _this.dataList.push('['+ data.rows[i].qd_date +','+ data.rows[i].status +','+ data.rows[i].ht_cash+']'); } func(data) } _this.dataList = '[' + _this.dataList +']'; }, function (ts, message) { console.log(message) }); }); loadChart: function () { var myChart = echarts.init(document.getElementById('main')); var _this = this; this.loadData(function (){ _this.data0 = '['+_this.dataList+']'; }); alert("|||||"+_this.data0); } ``` 怎么在loadChart中获取 _this.data0的值 data0定义的是全局

javascript中使用ajax时设置回调函数,我想向回调函数中传参?该怎么传参?

javascript中使用ajax时设置回调函数,我想向回调函数中传参?该怎么传参? getCitysByParentId是回调函数,我现在想往getCitysByParentId这个回调函 数中传liId这个参数进去,该怎么处理? ``` <script type="text/javascript"> var xmlHttpRequest; function createXmlHttpRequest() { //判断不同浏览器,采用不同方式创建XMLHttpRequest对象 if (window.ActiveXObject) { //IE浏览器 try { xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } return xmlHttpRequest; } else if (window.XMLHttpRequest) { //其他浏览器如Firefox、Chrome等等 return new XMLHttpRequest(); } } //我是回调函数 function getCitysByParentId(currentLiId) { //做一些事情,代码省略... //回调函数中要使用currentLiId这个参数,所以需要外界传一个参数进来 } function getCitys(cityId, liId) { //1.创建XMLHttpRequest对象 xmlHttpRequest = createXmlHttpRequest(); //getCitysByParentId是回调函数,我现在想往getCitysByParentId这个回调函 数中传liId这个参数进去,该怎么处理? //2.设置回调函数 xmlHttpRequest.onreadystatechange = getCitysByParentId; /* getCitysByParentId是回调函数,我现在想往getCitysByParentId这个回调函 数中传liId这个参数进去,该怎么处理? */ //请求的目标地址 var url = "${pageContext.request.contextPath}/JsonCity?provinceId=" + cityId; //3.初始化XMLHttpRequest组件 //addTimestampParameter(url)函数不太好的就是,URL本身可能带有一些参数,那就要判断是加"?"还是加"&"了 //xmlHttpRequest.open("GET", addTimestampParameter(url), true); xmlHttpRequest.open("GET", url, true); //xmlHttpRequest.open("POST", url, true); //推荐使用下面这种方式,简洁灵活,不影响URL参数 xmlHttpRequest.setRequestHeader('If-Modified-Since', '0'); //4.发送请求 xmlHttpRequest.send(null); //显示加载图片 showLoading(document.getElementById(liId), "${pageContext.request.contextPath}/img/loading1.gif"); } </script> ```

关于js匿名函数的返回值的获取问题

我还在读js的基础书籍,所以对一些js原理了解不是全面,所以问题如有愚昧,还请见谅。 ``` function asynSubmit(sData,action,method="POST"){ var httpRequest = new XMLHttpRequest(); var rMessage="请求未发送"; httpRequest.open(method,action); httpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded"); httpRequest.send(sData); httpRequest.onreadystatechange=function(){ if(httpRequest.readyState===4){ console.log("4"); if(httpRequest.status===200){ console.log("200"); var rData=httpRequest.responseText; //JSON.parse(httpRequest.responseText); return rData; }else{ return "服务器异常"; } }else{ return "服务器未响应"; } } } ``` 如上述代码,我想封装一个ajax的函数。想让函数返回responseText的值,因为onredeaychang调用了匿名函数,在匿名函数里返回的值我要怎么在外层函数获取?或者有其他什么方法能达到我的目的?我也试过在外层函数定义变量,在匿名函数里为变量赋值,但由于匿名函数绑定了事件,所以这样做直接返回空值。 自己想了很久,也百度过了,实在想不出解决办法,还请各位不吝赐教。

回调函数和注册回调函数的JNI接口该如何书写?

C++的函数代码如下,注册接口为cppfunction,回调函数为pFunc,其参数为PARA结构体。 ``` void cppfunction(void (*pFunc)(PARA*)) ``` 通过动态注册JNI的方式,cppfunction的函数签名该如何书写?直接将其参数标为jlong吗? {“native_cppfunction”,"{jlong}V",""cppfunction} 对于回调函数的函数签名,其参数为自定义的结构体,在java中该如何传递到native?难道将一个个的成员拆开进行传递,在native进行拼接成PARA结构体,然后在调用pFunc? 求大神帮帮忙~

C# 新建线程递归调用包含回调函数,怎么判断递归调用结束,获取返回值

如题,在新建线程中递归调用函数,一次结果的返回值由回调函数获取,我想根据线程的状态判断 递归调用是否结束,并获取正确返回值,但是一次执行后线程状态就变成了Stopped了,回调 函数还在继续执行,用什么标记回调函数执行结束呢?

Com组件调用C++回调函数,如何传参

一、com组件接口函数的实现: 1.成员 private: //回调函数指针 CComPtr<IDispatch> m_pChangeTempCallbackFun;//更换模板回调函数 2.函数 bool CDllHelper::SetCallBackFun(VARIANT vaJsFun) { if(vaJsFun.vt != VT_DISPATCH) { return false; } m_pChangeTempCallbackFun = vaJsFun.pdispVal; return true; } 二、C++程序 回调函数 void CALLBACK OnChangeTempEvent() { //其他代码 } 三、问题 怎么把回调函数指针传给SetCallBackFun函数?具体的代码

VC调用dll里面的回调函数

我调用一个dll里面的回调函数,原型说明如下,请问怎么调用?感觉原型有问题,和我看的资料不一样 void (WINAPI SetCallback)(long caller,long userdata); 设置回调,回调函数将接收终端传过来的数据和消息 回调函数的参数为 Void CALLBACK eipcalback(int cmdtype,char *ip,char *rectime,char *lpn,char *imgfile,BYTE *imgdata,int imgsize,RECT *lpnpos,long userdata);

函数返回值是函数的调用问题

function func(){ var a=0; return function(){ console.log(a++); } } func(); //调用没有返回值 var f1=func(); f1(); //赋值之后调用有返回值0 为什么要把一个命名函数的返回值是一个函数时,要把这个命名函数赋值给一个变量调用才能有返回值。

mfc窗口回调函数问题,窗口上的控件注册的回调函数是哪里

本贴不讨论mfc是否过时问题,请鄙视mfc人士走开 我在看windows编程,期间遇到一些问题,由于mfc是封装好的,底层都是调用同一个基类的回调函数,而win32开发时,一个窗口上有一些控件比如:按钮,菜单,列表框等,但是为啥只有一个窗口回调函数。 ,难道窗口上控件都是共用同一个窗口回调函数的吗,但是在创建这些组件时也没有显示注册窗口过程为父窗口的回调函数啊,这些控件的回调函数在哪里,为啥没有注册窗口过程也能工作的好好的?

帮我通俗的介绍一下回调函数 最后有案例,还有应用回调函数的场景

如题.帮我通俗的介绍一下回调函数 最后有案例,还有应用回调函数的场景.

js中回调函数的执行顺序

代码是调用了地图api函数,里面有个回调函数,想在回调函数里把值赋给全局变量,但是回调函数之后的代码里全局变量的值没变,具体见代码: ``` <script type="text/javascript"> //基本地图加载 var map = new AMap.Map("container", { resizeEnable: true, //地图中心点 zoom: 13 //地图显示的缩放级别 }); var g=18; AMap.service(["AMap.RoadInfoSearch"], function() { //加载地理编码 var road=new AMap.RoadInfoSearch({ city:"北京", panel:"result" }); alert("2:"); road.roadInfoSearchByRoadName("广贤路",function (status,result){ if(status=="error ")alert("error"); else if (status=="no_data")alert("noting"); else { var a = result.info; var b = result.roadInfo; g=59; } }); }); alert(g); ``` ...后面还有许多代码,g弹出的是18,但如果alert(g);前加一个alert("..");得到的g 就是59,这究竟是为何,求问

使用$.post,数据已提交,但回调函数不执行

我用$.post希望实现异步提交的功能,代码如下: ``` javascript $.post(addURL, {pid : id}, function (data) { alert("回调函数"); alert(data["status"]); }, "json") .success(function () {alert("success");}) .error(function () {alert("error");} ); ``` PHP代码 ```php $db = M('cart'); $pid = I('pid', 0, 'intval'); $cart = array( 'aid' => (int) $_SESSION['uid'], 'pid' => $pid, 'num' => 1 ); $return = array(); // 检查购物车中是否已有相同商品 if ($db->where($cart)->count()) { $return['status'] = 0; } else { $db->add($cart); $return['status'] = 1; } // ajaxReturn()为ThinkPHP框架提供的方法 $this->ajaxReturn($return, 'json'); ``` 提交之后数据被插入了数据库,但是回调函数并没有执行,并且alert了error信息。但是我如果使用$.ajax方法却能够正确执行回调函数。 ```javascript $.ajax({ url : addURL, async : false, type : "POST", data : {pid : id}, dataType : "json", timeout : 1000, error : function () {alert("error");}, success : function (data) { alert("回调函数"); alert(data.status); } }); ``` 不过,虽然$.ajax提交成功并且正确执行了回调函数,但是在开发人员工具中并不能看到我php控制器的响应(之前用$.post方法提交的时候能够看到控制器的响应)。 对于$.ajax和$.post这种傲娇的行为我实在是不能理解……

串口 回调函数如何通知

请问我在串口类中定义了回调函数 typedef void(CALLBACK* ONSERIESREAD)(void * pOwner,BYTE *buf,DWORD dwBufLen); ONSERIESREAD m_OnSeriesRead;在类中声明,当接收到数据时触发回调函数通知,我在接下来要使用回掉函数中的buf和dwBufLen 应该怎么做呢?

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 解析cad c#数字格式化万 c#int转byte c#格式化日期 c# wpf 表格 c# 实现ad域验证登录 c#心跳包机制 c#使用fmod.dll c#dll vb 调用 c# outlook
立即提问
相关内容推荐