node.js如何来解决掉回调函数

2 篇文章 0 订阅
1 篇文章 0 订阅

最近用node遇见一个问题,在做http返回的时候遇见了异步操作,由于我的http返回本身是异步操作,redis也是异步操作所以导致在返回的时候获取不到从数据库获取的值。主要问题是由于两个异步同时执行不知道那个会先结束,所以获取值出现了问题。

主要解决方法是用了ES6的 async/await 还有 Promise

我先写写我对async/await的理解,这两个方法可以理解为语法糖,也可以理解成标签。一般的用法则是,

 var fn_hello = async (ctx, next) => {
    
    let data = await getData.jjj();
    ctx.response.body = data;
    console.log(data);


};

或许上面的有人看不明白那么我就换一个写法

async function fn_hello (ctx, next){
    let data = await getData.jjj();
    ctx.response.body = data;
    console.log(data);
    
};

在函数前面放async代表这个函数是异步函数,等于给这个函数添上了一个标签告诉别人这个函数是异步操作,由于我函数内部的getData.jjj()是一个异步操作,如果不加await标签的话,那么data的值不知道什么时候可以赋值给ctx.response.body。所以要解决这个问题那么就在方法执行前面加一个标签await。加上这个标签后就会变成同步等待,下面的赋值操作会等待这个异步执行完成后再执行

*在这里插入图片描述
这个是getData.jjj()内部的方法实现,fs的操作是一个异步操作,所以他的结果再回调中,这个时候就可以去了解一个Promise这个函数.这个一时半会也讲不清楚。我在回调中把resolve(‘222222’);方法传回给Promise.最后在return 这个对象。然后在调用这个方法的界面把这个方法设置成同步操作,这就解决了嵌套回调操作的问题

**

还有一种简单暴力的解决方法,要是回调地狱。贼恶心,写过一次

**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值