这是一个controller.js, aa查询拿到结果,传给bb查询拿到结果,传给cc查询拿到结果
const aa = require("../../model/aa")
const bb = require("../../model/bb")
const cc = require("../../model/cc")
const login = (req, res) => {
aa(req, data1 => {
bb(data1, data2 => {
cc(data2, data3 => {
res.send({ msg1: data1, msg2: data2, msg3: data3 })
})
})
})
}
module.exports = login
请问怎么解决掉这种回调地狱的问题,我现在都是这种嵌套写十几层才能解决业务
我希望达到这种简单的async/await写法,但是失败了击败次,实在不会,求大佬给我一下
data1 = await aa(req)
data2 = await bb(data1)
data3 = await cc(data2)
res.send({ msg1: data1, msg2: data2, msg3: data3 })
普通函数需要用 Promise 包裹并使用创建 Promise 时候的 resolver 回调传参才能被 await 正确接收,以 aa 的改写为例:
另外一点, async...await 语法需要环境支持,首先是语法支持,然后是全局作用域支持。
检查全局环境是否支持:
如果支持全局的话最好,直接改写所有接口就行。
如果全局不支持的话还可以试试是否支持 async...await 方法:
如果支持的话可以用上面这种 async IIFE 来支持。
如果完全不支持的话可以试试 Promise 链式调用(不支持 async 的环境通常也没有内置 Promise ,需要引入第三方实现)。