异步回调函数如何返回结果给主函数?

weixin_44877920 2019-04-23 10:31:36
function ff(a,b){
setTimeout(() => {
return a+b
}, 3000);
}
function f(callback){
var x=3,y=4;
var z=callback(x,y);
console.log("主函数")
return z;
}
console.log(f(ff));//这里返回的是undefined
...全文
640 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
丰云 2019-04-23
  • 打赏
  • 举报
回复
因为setTimeout的延迟,原先试图console.log(f(ff));是无论如何都行不通的
丰云 2019-04-23
  • 打赏
  • 举报
回复

    function ff(a, b, cbk) {
        setTimeout(() => {
            cbk(a + b);
        }, 3000);
    }
    function f(callback) {
        var x = 3, y = 4;
        var z = 0;
        callback(x, y, function (re) {
            z = re;
            console.log(z)
        });
        console.log("主函数")
        return z;
    }
    f(ff);

丰云 2019-04-23
  • 打赏
  • 举报
回复
方法很多,全局变量也行,传参也行,最好的方法是回调函数 不过你这里面用到了setTimeout,作用域被隔离了,需要重新设计
天际的海浪 2019-04-23
  • 打赏
  • 举报
回复
二是用Promise对象配合async function异步函数

function ff(a,b){
	return new Promise(resolve=>{
	    setTimeout(() => {
			resolve(a+b);
 	   }, 3000);
	});
}
async function f(callback){
    var x=3,y=4;
    var z= await callback(x,y);
    console.log("主函数")
    return z;
}
(async function () {
	console.log(await f(ff));
})();

天际的海浪 2019-04-23
  • 打赏
  • 举报
回复
一是用回调函数

function ff(a,b,cbf){
    setTimeout(() => {
       cbf(a+b);
    }, 3000);
}
function f(callback,cbf){
    var x=3,y=4;
    var z=callback(x,y,cbf);
}
f(ff,function(rv){
	console.log(rv);
})

87,915

社区成员

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

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