我在 HarmonyOS 发送http网络请求 中讲述了 HTTP请求的基本方式
然后 就带出了 回调地狱的问题
然后 上文 HarmonyOS 通过Promise 解决异步回调地狱问题 我们用Promise的解决方案 搞定了 这个问题
但是 Promise 这种写法 可读性其实没有那么优秀 没有搞定 Promise return规则的人甚至都看不懂
我们可以用另一个ES6知识点 async与await同异步转换
我们代码可以这样写
import http from '@ohos.net.http'
@Entry
@Component
struct Index {
async aboutToAppear() {
let httpReq = http.createHttp();
let PromiseT = await httpReq.request(
"http://localhost/books",
{
method: http.RequestMethod.GET
}
)
let result = JSON.parse(`${PromiseT.result}`);
let httpReq1 = http.createHttp();
let data = await httpReq1.request(
"http://localhost/books/"+result.data[0].id,
{
method: http.RequestMethod.GET
}
)
console.log(JSON.stringify(data.result));
}
build() {
Column({space: 30}) {
}
.width('100%')
.height('100%')
}
}
先给我们的 aboutToAppear 修饰一个 async
这样才能在它里面进行 await
然后 我们先请求 http://localhost/books 这里 我们加了 await 请求会一直等它返回 不会提前执行
然后 等它发挥了 用它返回的数据 第一条 0 下标的id 去作为路径参数 请求 “http://localhost/books/”+result.data[0].id,
运行结果如下
也是没有任何问题