首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

仅在非thenable异步函数完成后执行代码

非thenable异步函数是指不返回Promise对象的异步函数。在该函数完成后执行代码可以通过以下几种方式实现:

  1. 使用回调函数:在异步函数中传入一个回调函数作为参数,在异步操作完成后调用该回调函数执行后续代码。例如:
代码语言:txt
复制
function asyncFunction(callback) {
  // 异步操作
  setTimeout(() => {
    // 操作完成后执行回调函数
    callback();
  }, 1000);
}

// 调用异步函数,并在完成后执行代码
asyncFunction(() => {
  // 执行后续代码
  console.log("异步操作完成");
});
  1. 使用Promise对象:将非thenable异步函数封装成Promise对象,通过resolve或reject方法触发异步操作的完成状态,并使用then方法执行后续代码。例如:
代码语言:txt
复制
function asyncFunction() {
  return new Promise((resolve, reject) => {
    // 异步操作
    setTimeout(() => {
      // 操作完成后触发resolve
      resolve();
    }, 1000);
  });
}

// 调用异步函数,并在完成后执行代码
asyncFunction().then(() => {
  // 执行后续代码
  console.log("异步操作完成");
});
  1. 使用async/await:使用async关键字定义一个异步函数,并使用await关键字等待异步操作完成,然后执行后续代码。例如:
代码语言:txt
复制
async function asyncFunction() {
  // 异步操作
  await new Promise((resolve) => setTimeout(resolve, 1000));
}

// 调用异步函数,并在完成后执行代码
(async () => {
  await asyncFunction();
  // 执行后续代码
  console.log("异步操作完成");
})();

以上是在非thenable异步函数完成后执行代码的几种常见方式。根据具体的场景和需求,选择合适的方式来处理异步操作的完成事件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

静态代码块、静态代码块、构造函数三者执行顺序

主要探讨一下关于静态代码块,静态代码块,构造函数执行顺序。 如有错误,欢迎指出。 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行。...在创建一个对象的时候会执行静态代码块和构造函数 再者是执行顺序: /* * *(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。...//静态代码块 static{ System.out.println("B");//第二步执行 } //静态代码块 { System.out.println...//静态成员变量,变成第二步执行 //静态代码块 { System.out.println("A"); } } 输出: B A A 所以验证:...2.在创建一个对象的时候会执行静态代码块和构造函数

48420
  • Promise 与 RxJS

    Promise与RxJS对比 相似处 他们都解决了原来代码的多层嵌套或者是不断的callback,使代码看起来更优雅也便于维护。...stream1$.subscribe(value => console.log(value)); 区别 Promise顾名思义,提供的是一个允诺,这个允诺就是在调用then之后,它会在未来某个阶段把异步函数执行的结果传给...Array: ['P1', 'P2'] }); 并行执行-择优获取 多个异步任务是为了容错。...p2仍在继续执行,但执行结果将被丢弃。 如果我们组合使用Promise,就可以把很多异步任务以并行和串行的方式组合起来执行。...async 函数中可能会有 await 表达式,await表达式会使 async 函数暂停执行,直到表达式中的 Promise 解析完成后继续执行 async中await后面的代码并返回解决结果。

    1.7K20

    小而美的Promise库——promiz源码浅析

    代码实现与分析 异步执行器 在介绍Promise之前,我们先介绍一下异步执行器。在Promise中,我们需要一个异步执行器来异步执行我们的回调函数。...具体代码如下: var queueId = 1 var queue = {} var isRunningTask = false // 使用postMessage来执行异步函数 if (!...,我们简单说明下: 在代码中,promiz使用了setImmediate、setTimeout和postMessage这三个方法来执行异步函数,其中: setImmedeate,只有IE实现了该方法,在执行完队列中的代码后立即执行...构造函数 说完了异步函数执行器,我们来看下promise的构造函数。...那么这些回调函数到底是做什么用的呢?我们需要来看下thenable函数的实现代码

    67420

    前端异步代码解决方案实践(二)

    } else { // thenable } then 回调异步执行 众所周知, Promise 实例化时传入的函数会立即执行, then(...)...then 注册回调函数为什么异步执行 这里回答开篇所提到的一个问题, then 注册的 onResolved、 onRejected 函数为什么要采用异步执行?再来看一段实例代码。...区别于普通函数,Generator Function 可以在执行时暂停,后面又能从暂停处继续执行。通常在异步操作时交出函数执行权,完成后在同位置处恢复执行。...比如在异步流程中,生成器函数执行到 yield 关键字处挂起,异步操作完成后须传递当前异步值供迭代器后续流程使用。...但更复杂的是异步操作,需要异步完成后执行迭代器 next(data) 方法,传递异步结果并恢复接下来的执行。但以何种方式在异步完成时执行 next(),需要提前约定异步操作形式。

    3.3K60

    JS魔法堂:剖析源码理解PromisesA规范

    Promise.race实现) 七、总结 八、参考 二、从痛点出发                              js中最常见的异步编程方式我想应该回调函数不可了,优点是简单明了。...; }); } 三、 从感性领悟                               也许通过上述代码我们已经了解到Promise可以让我们以不同的方式编写异步代码,但也仅仅停留在按形式套代码的层面上而已...因此回调函数异步模式与我们的思维模式相距甚远,那么如何做到即告诉程序任务间的时间距离,又从代码结构上淡化这种时间距离感呢?而Promise就是其中一种方式了!  ...入参 void resolve({Any} val)  ,当val为thenable对象和promise对象时则会将val作为执行成功事件处理函数的入参,若val为thenable对象时则会执行thenable.then...由于源码中加入性能优化的代码,因此我提出核心逻辑以便分析: // 将thenable对象构造为thenable对象 // 其then方法则返回一个真正的Promise对象 function ValuePromise

    1.3K110

    js异步的5种样式

    要调用的函数后要执行的 JavaScript 代码串。 2)millisec:必需。在执行代码前需等待的毫秒数。 3)lang:可选。...要调用的函数后要执行的 JavaScript 代码串。 2)millisec:必需。在执行代码前需等待的毫秒数。 3)lang:可选。...finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作,返回一个回调函数。...3)案例: 第一个一秒打印出来,第二个等第一个完成后过两秒打印,第三个等第二个完成后过三秒打印(太过繁琐) 5.asyns和await async 函数是什么?...一句话,它就是 Generator 函数的语法糖。 故名思意async意为异步表示执行异步操作,await意为等待将配合async进行使用从而达到异步

    4.7K10

    JavaScript之Promise对象

    解释一下 从 pending 变为 fulfilled 这段代码,当执行 new Promise() 时,传入的执行函数就立即执行了,此时其内部有一个异步操作(过 500ms 之后执行),等过了 500ms...; }); 上面代码中,不管 promise 最后的状态,在执行完 then 或 catch 指定的回调函数以后,都会执行 finally 方法指定的回调函数。...p1和p2,并在它们都完成后执行then: Promise.all([p1, p2]).then(function (results) { console.log(results); // 输出...(thenable); p1.then(function (value) { console.log(value); // 42 }); 上面代码中,thenable 对象的 then 方法执行后...在异步执行的流程中,可以把执行代码和处理结果的代码清晰地分离开来。 缺点: 无法取消 Promise,一旦新建它就会立即执行,无法中途取消。

    86430

    JavaScript 高级程序设计(第 4 版)- 期约和异步函数

    # 异步编程 同步行为对应内存中顺序执行的处理器指令。在程序执行的每一步,都可以推断出程序的状态。 异步行为类似于系统中断,即当前进程外部的实体可以触发代码执行。...该错误不能通过try/catch捕获,只能通过拒绝处理程序捕获) 同步/异步执行的二元性 代码一旦开始以异步模式执行,则唯一与之交互的方式就是使用异步结构——更具体地说,就是期约的方法 # Promise...# 异步函数 async 用于声明异步函数,可以用在函数声明,函数表达式、箭头函数和方法上 使用async关键字可以让函数异步特征,但总体上其代码仍然是同步求值的 异步函数如果使用return返回了值...,等待期约解决 await关键字会暂停执行异步函数后面的代码,让出JS运行时的执行线程 await会尝试“解包”对象的值,然后将整个值传给表达式,再异步恢复异步函数执行 await关键字与JS一元操作一样...,不能再顶级上下文中使用 异步函数的特质不会扩展到嵌套函数异步函数只能直接出现在异步函数的定义中 # 停止和恢复执行 JavaScript 运行时在碰到 await 关键字时,会记录在哪里暂停执行

    1.3K100

    前端面试之React

    根据函数这种理念,React 的函数组件只应该做一件事情:返回组件的 HTML 代码,而没有其他的功能。函数的返回结果只依赖于它的参数。不改变函数体外部数据、函数执行过程里面没有副作用。...一般把函数式组件理解为class组件render函数的语法糖,所以每次重新渲染的时候,函数式组件内部所有的代码都会重新执行一遍。...唯一的区别是:useCallback 不会执行第一个参数函数,而是将它返回给你,而 useMemo 会执行第一个函数并且将函数执行结果返回给你。...也可以new一个 Vue 的 EventBus,进行事件监听,一边执行监听,一边执行新增 VUE的eventBus 就是发布订阅模式,是可以在React中使用的; setState 既存在异步情况也存在同步情况...函数中的 default 的逻辑,这里才会真正异步执行 import(url)操作,由于并未等待,随后会检查模块是否 Resolved,如果已经Resolved了(已经加载完毕)则直接返回moduleObject.default

    2.5K20

    轻松了解一下es6中的异步流程控制

    异步流程控制 如果你写过任何数量相当的JavaScript,这就不是什么秘密:异步编程是一种必须的技能。管理异步的主要机制曾经是函数回调。...Promise提供了一种可信的中介机制 —— 也就是,在你的调用代码和将要执行任务的异步代码之间 —— 来管理回调。...* 如果你不使用参数值,或任何promise值调用resolve(..),promise就会被完成。...然而,还存在称为 thenable 的类promise对象,它通常可以与Promise机制协作。 任何带有then(..)函数的对象(或函数)都被认为是一个thenable。...这种“让出一个promise推进generator”的模式将会如此常见和如此强大,以至于ES6之后的下一个版本的JavaScript几乎可以确定将会引入一中新的函数类型,它无需运行工具就可以自动地执行

    95510

    ES6-标准入门·异步编程 Promise

    然后,then 方法指定的回调函数将在当前脚本所有同步任务执行完成后才会执行,所以 Resolved 最后输出。...Promise 对象,然后立即执行 thenable 对象的 then 方法。...=> { console.log(e === thenable) // true }) 上面的代码中,Promise.reject 方法的参数是一个 thenable 对象,执行以后,后面 catch...('now') Promise.resolve().then(f) console.log('next') // next // now 有两种方法可以让同步函数同步执行,让异步函数异步执行,并且让它们具有统一的...// next 上面的代码中,第二行是一个立即执行的匿名函数,会立即执行里面的 async 函数,因此如果 f 是同步的,就会得到同步的结果;如果 f 是异步的,就可以用 then 指定下一步。

    37730

    【译】《Understanding ECMAScript6》- 第七章-Promise

    回调函数 Node.js使用回调函数实现异步编程。回调函数模式与事件驱动相同的地方是,指定代码在对应的条件触发后才会被执行。不同的是,延迟执行的回调函数作为一个参数被传入指定的函数。...; }); }); 上述代码中,readFile()检索成功后会执行另一个异步回调函数writeFile()。请注意每个回调函数都是error-first风格。...readFile()检索完成后,如果没有发生错误,它的回调函数中又调用了writeFile()。随后,writeFile()执行完毕后在JavaScript执行序列末尾新增的回调函数。...then()方法接收两个参数(任何实现then()方法的对象被称为thenable),第一个参数是Promise进入fullfilled状态的响应函数,其参数是异步操作执行成功后的数据信息;第二个参数是...代码执行了resolve(42),所以thenable的promise状态为fulfilled。

    2.1K60

    面试官:为什么Promise中的错误不能被trycatch?

    异步处理在我们日常开发中是很常见的场景,在Promise出现之前,我们都是通过回调来处理异步代码的结果,但是出现了一些问题: 回调地狱,在有多个异步逻辑存在依赖关系时,我们只能在回调里嵌套,这些深度嵌套的代码代码难以阅读和维护...这也没有统一的标准,对于大部分代码,我们根本就不能对这些已经执行完的代码注册回调,有些会同步执行回调,有些会异步执行回调,我们根本不可能记住所有api的机制,要么每次使用时我们都要研究这个api的实现机制...,要么我们可能就在写bug 而且,如果我们想对一个异步逻辑注册多个回调,这也要看api提供方支不支持 最重要的,如果有统一的方式来处理错误跟正确结果的话,我们就有可能实现一套通用的逻辑来简化代码复杂度,...根据handler的执行情况,有这几种可能: doSomethingWith返回一个thenable,p2将会被resolve到这个thenable(取决于这个thenable执行情况,决定p2是fulfilled...如果Promise已经变成fulfilled了,那fulfillment handler会被立即调度(不是立即执行),调度指的是被加入微任务队列,确保这些handler被异步调用大概是Promise唯一让同步代码异步调用的情形了

    1.5K30

    有道题,得细说

    如果后面跟的是thenable时,await会收集thenable对象的原型对象上的then方法,并给其注入resolve和reject;然后阻塞当前作用域代码执行,等待注入的resolve开启微任务异步队列的执行...如果后面不是thenable对象的话,直接开启微任务异步队列的执行。(此处感谢@茹挺进大佬的审查和建议) 执行这段代码,理解上述说明: var o = {}; o....对象中被注入的resolve函数,如果不执行,那么await将一直阻塞,当前作用域里,await后面的代码永远不会执行。...阻塞了async2中await后面的函数,先开启当前微任务异步队列的执行。 await返回后,执行后面的同步代码,打印6,此时同步的代码执行完毕。...同步的代码执行完毕后,执行刚才开启的微任务异步队列,打印4,此时await开启的微任务异步队列执行完毕。 await开启的微任务异步队列执行完毕后,解除阻塞,打印3。

    59820
    领券