帖子
帖子
用户
博客
课程
显示全部楼层
7
帖子
0
勋章
64
Y币

[问题求助] api.ajax 的await使用

[复制链接]
发表于 2023-8-23 15:55:35
想要实现等待ajax回调执行完成后,再执行下一段代码的功能。使用了await但是没有达成。

代码块:

  1. <div>
  2. <div>async function getRecordDeatils() {
  3.         console.log('异步等待验证  执行getRecordDeatils');
  4.         var paralist = {
  5.             "method": "GetRecord"
  6.         };
  7.         await api.ajax({
  8.             url: $api.getStorage('url')
  9.             method: 'post',
  10.             data: {
  11.                 values: paralist
  12.             }
  13.         }, function (ret, err) {
  14.             console.log('异步等待验证  执行 getRecordDeatils ajax返回');
  15.         });
  16.         console.log('异步等待验证  执行getRecordDeatils 结束');
  17. }</div>
  18. getRecordDeatils();</div>
复制代码
这是在控制台输出的结果:

  1. <div>[2023-8-23 15:39:47][INFO] 异步等待验证  执行getRecordDeatils at record.html:305
  2. [2023-8-23 15:39:47][INFO] 异步等待验证  执行getRecordDeatils 结束 at record.html:397
  3. [2023-8-23 15:39:47][INFO] 异步等待验证  执行 getRecordDeatils ajax返回 at record.html:319</div>
复制代码
我想要的控制台输出结果应该是:
1、异步等待验证  执行getRecordDeatils
2、异步等待验证  执行 getRecordDeatils ajax返回
3、异步等待验证  执行getRecordDeatils 结束
应该怎么写才能实现呢?
380
帖子
4
勋章
6
Y币
您好,直接放回调里面

function getRecordDeatils() {
        console.log('异步等待验证  执行getRecordDeatils');
        var paralist = {
            "method": "GetRecord"
        };
        await api.ajax({
            url: $api.getStorage('url')
            method: 'post',
            data: {
                values: paralist
            }
        }, function (ret, err) {
            console.log('异步等待验证  执行 getRecordDeatils ajax返回');
                   console.log('异步等待验证  执行getRecordDeatils 结束');
        });
7
帖子
0
勋章
64
Y币
技术咨询-F · 2023-8-23 16:30您好,直接放回调里面

function getRecordDeatils() {

因为项目需求是,调用好几个接口,等全部接口数据返回了,才能做数据处理。
如果放到回调里,就会嵌套很多层。
有没有办法能够实现 api.ajax的回调执行完了,再执行下一段代码
10
帖子
1
勋章
5691
Y币
本帖最后由 杨永安 于 2023-8-23 17:06 编辑

api.ajax是回调风格的。

可以使用 promise 包装一下, 来适配 async 和 await。



你可以使用Promise来进行包装,以下是一个例子:

```javascript
function ajax(params) {
  return new Promise((resolve, reject) => {
    api.ajax(params, function(ret, err){
      if (ret) {
        resolve(ret);
      } else {
        reject(err);
      }
    });
  });
}
```

然后你就可以使用 async 和 await 来使用这个函数了,例如:

```javascript
async function test() {
  try {
    let result = await ajax(params);
    console.log(result);
  } catch (err) {
    console.error(err);
  }
}
```

在这个例子中,我们创建了一个新的函数 `ajax`,它接收相同的参数 `params`,并返回一个新的 Promise。在这个 Promise 中,我们调用原来的 `api.ajax` 函数,并在回调函数中,如果成功就调用 `resolve`,如果失败就调用 `reject`。

然后我们就可以在异步函数中使用 `await` 来调用这个新的 `ajax` 函数,并使用 `try/catch` 来处理可能的错误。

7
帖子
0
勋章
64
Y币
杨永安 · 2023-8-23 17:02api.ajax是回调风格的。

可以使用 promise 包装一下, 来适配 async 和 await。

十分感谢!我研究一下
app基本没有同步方法  机制问题 不然会anr的
您需要登录后才可以回帖 登录

本版积分规则