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

最近用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 这个对象。然后在调用这个方法的界面把这个方法设置成同步操作,这就解决了嵌套回调操作的问题

**

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

**