执行完一个方法再执行另一个方法(async、await、promise)

需求:点击发送时先执行完temSaveOperation()方法再去执行sendCgOperation()方法。

// 点击暂存执行操作
        temSaveOperation() {
            return new Promise((resolve, reject) => {
                const _route = this.$route;
                this.templateId = _route.params.templateId;
                if (_route.query && _route.query.id) {
                    // 在原有草稿上进行编辑,只向后台发送新增文件
                    this.addBqContent(resolve, reject);
                } else {
                    // 新增便签
                    this.newBq(resolve, reject);
                }
            });
        },
        // 新建便签
        newBq(resolve, reject) {
            // 新建 ajax 配置
            const newBqAjaxOptions = {
               
            };

            // 如果是第一次点击暂存就新增一条数据
            if (!this.isClickTemSave) {
                // 获取数据
                this.requestNewBq(newBqAjaxOptions)
                    .then(data => {
                        resolve(data);
                    })
                    .catch((error) => {
                        reject(error);
                    });
                // 已经点击过暂存
                this.setClickTemSave(true);
            } else {
                // 不是第一次点击,则只向后台发送新增文件
                this.addBqContent();
            }
        },
        // 设置是否点击过暂存
        setClickTemSave(isClickTemSave) {
            this.isClickTemSave = isClickTemSave;
        },
        // 增加便签内容
        addBqContent(resolve, reject) {
            // 增加内容 ajax 配置
            const addBqContentAjaxOptions = {
                
            };
            // 获取数据
            this.requestAddBqContent(addBqContentAjaxOptions)
                .then((data) => {
                    resolve(data);
                })
                .catch((error) => {
                    reject(error);
                });
        },
sendCg() {
    // 暂存
     this.temSaveOperation()
         .then(() => {
             // 发送
             this.sendCgOperation();
         });
 },

或者:

async sendCg() {
    // 暂存
    await this.temSaveOperation();
    // 发送
    this.sendCgOperation();
},

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<script>
    var data = '';

    async function a() {
        await b();
        d();
    }

    function b() {

        return new Promise((resolve, reject) => {
            c(resolve, reject);
        })

    }

    function c(resolve, reject) {
        setTimeout(() => {
            data = '张三';
            resolve();
        }, 1000);
    }

    function d() {
        console.log('data:', data);
    }

    a();

</script>
</body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Promise` 和 `async/await` 的执行顺序都基于 JavaScript 事件循环机制。 在 `Promise` 中,异步操作会被添加到事件队列中,然后按照队列中的顺序执行。在执行过程中,如果遇到了异步操作,就会将其添加到事件队列中等待执行。当所有的同步任务执行毕后,才会开始执行异步任务。 在 `async/await` 中,异步操作会被转化成一个 `Promise` 对象,并使用 `await` 等待异步操作的结果。在执行过程中,如果遇到了 `await`,JavaScript 引擎会暂停当前的异步操作,并等待 `Promise` 对象的状态变为 `resolved` 或 `rejected`,然后再继续执行后面的代码。 下面是一个简单的例子,演示了 `Promise` 和 `async/await` 的执行顺序: ``` // 使用 Promise console.log('start'); new Promise((resolve, reject) => { console.log('Promise1'); resolve(); }) .then(() => { console.log('Promise2'); }); console.log('end'); // 使用 async/await async function asyncFunc() { console.log('start'); await new Promise((resolve, reject) => { console.log('Promise1'); resolve(); }); console.log('Promise2'); console.log('end'); } asyncFunc(); ``` 在 `Promise` 中,首先输出了一个 `start`,然后创建了一个 `Promise` 对象并添加到事件队列中,接着输出了一个 `end`,最后在异步任务执行毕后输出了 `Promise2`。 在 `async/await` 中,首先输出了一个 `start`,然后创建了一个 `Promise` 对象并使用 `await` 等待其执行结果,接着输出了一个 `Promise2` 和一个 `end`。 因此,最终的输出结果分别是: ``` // Promise start Promise1 end Promise2 // async/await start Promise1 Promise2 end ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值