关于同步异步回调!

// 问题: 如何正确的输出 ok ?!

      // functionTwo();

      // function functionOne() {
      //   console.log("wait");
      //   setTimeout(() => {
      //     return true;
      //   }, 2000);
      // }

      // function functionTwo() {
      //   if (functionOne()) {
      //     console.log("ok");
      //   }
      // }

==================分割线==========================

答案一  promise方法解决

 /**

        * 在这段代码中, functionOne 使用 setTimeout 函数模拟一个延时一秒的异步操作。当 setTimeout 完成后,它会执行回调函数并返回 true ,但是此时 functionOne 已经执行完毕并返回 undefined 了,因为 setTimeout 是异步的,不会等到回调函数执行完毕才继续往下执行。

        * 在 functionTwo 中,它调用了 functionOne ,但是由于 functionOne 返回的是 undefined ,所以if语句中的判断条件为false,不会执行 console.log("ok!!!") 语句。

        * 如果您想要在 functionTwo 中输出"ok!!!",可以将 functionOne 修改为返回一个Promise对象,以便在 functionTwo 中等待它的执行结果。

       **/

      // functionTwo();

      // function functionOne() {
      //   console.log("wait...");
      //   return new Promise((resolve, reject) => {
      //     setTimeout(() => {
      //       resolve(true);
      //     }, 1000);
      //   });
      // };

      /** 
       * 现在 functionOne 返回的是一个Promise对象,可以通过 await 关键字等待它的执行结果。

       *  functionTwo 也需要被标记为 async 函数,才可以使用 await 关键字。

       *  运行这段代码将会输出 wait... 和 ok!!! ,因为 await 会等待 functionOne 异步操作的完成,并将其异步操作的结果返回给if语句进行判断。
       
       **/

      // async function functionTwo() {
      //   if (await functionOne()) {
      //     console.log("ok!!!");
      //   };
      // };

      //   ---------------------------------- 分割线 -------------------------------------------

      //  答案二 回调函数方法解决

      /**
       * 在这个代码中,我们修改了 functionOne 函数,加入了一个回调函数参数。

       *  在 setTimeout 函数执行成功后,调用回调函数来通知外部代码,这里是调用 functionTwo 函数。

       *  在 functionTwo 函数内部,我们将输出 ok!!! 的代码放到了回调函数中,当 functionOne 函数执行成功后,回调函数被调用,从而实现了在输出 wait... 后输出 ok!!! 

    

      // functionTwo();

      // function functionOne(callback) {
      //   console.log("wait...");
      //   setTimeout(() => {
      //     callback(true);
      //   }, 1000);
      // };

      // function functionTwo() {
      //   functionOne((result) => {
      //     if (result) {
      //       console.log("ok!!!");
      //     }
      //   });
      // };

 *  setTimeout是一个异步方法
       *  什么是 同步?

        依次向下执行,单车道执行
       
       *  什么是异步?
       这边执行不需要等待的,那边执行需要等待的,双车道同时执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值