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

【Kotlin 协程】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值弊端 | 尝试 sequence 调用挂起函数返回多个返回值 | 协程调用挂起函数返回集合 )

文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值弊端 三、尝试 sequence 调用挂起函数返回多个返回值 四、协程调用挂起函数返回集合 一、以异步返回返回多个返回值 ----... Kotlin 协程 Coroutine , 使用 suspend 挂起函数 以异步方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程挂起和恢复 ① ( 协程挂起和恢复概念...sequence 调用挂起函数返回多个返回值 ---- 尝试使用 挂起函数 kotlinx.coroutines.delay 进行休眠 , 这样挂起时 , 不影响主线程其它操作 , 此时会报如下错误...SequenceScope 对象方法 ; 该匿名函数 , 不能调用 SequenceScope 之外定义挂起函数 , 这样做是为了保证该类执行性能 ; /** * 构建一个[Sequence...---- 如果要 以异步方式 返回多个返回值 , 可以协程调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断 先后 返回 多个 返回值 ; 代码示例 : package

8.2K30

不只是离线缓存! - 论如何善用ServiceWorker

/sw.js#容易造成SW脚本获取路径不一致 加载前,我们最好判断一下dom是否加载完了,不然安装sw可能会卡dom 加载完成后,register函数返回一个Promise,由于前端大多不适用于异步...由于sw不可访问window,sw是无法使用ajax或XMLHTTPRequest。同时,fetch是一个异步函数,直接调用它会返回一个Promise。...并行请求 / Request Parallelly SW又一大黑科技隆重登场=>Promise.any,这个函数拥有另外两个衍生兄弟Promise.all&Promise.race。...Promise.race 此函数也是并行执行,不过与all不同是,只要有任何一个函数完成,就立刻返回,无论其是否reject或者resolve。...caches.match(req)将会试图CacheStorage匹配请求url获取值,然后丢给管道同步函数then,传参resp为Cache匹配到值。

3.2K21
您找到你想要的搜索结果了吗?
是的
没有找到

JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析

虽然jQuery.Deferred出现会导致初接触Promise朋友产生不少误解,但同时证明了Promises/A+规范实现已成为开发过程必不可少利器了。  ...辅助方法——jQuery.when     功能就是等待所有入参均返回值后,以这些返回值为入参调用回调队列函数 $.when = function(object) {   var args = arguments...开发团队意识到jQuery.Deferred实现与Promises/A+规范相距甚远,于是1.6版本上补丁式地为EnhancedDeferred增加了一个 pipe方法 ,从而实现回调函数责任链...而比较大局部功能重构是jQuery.Deferredthen方法被重构成为pipe方法别名,而pipe函数实现为Promise/A规范then方法,因此1.8then方法与旧版本then...then函数实现方式与旧版本不同,埋下了兼容陷阱,但由于jQuery.Deferred受众面少(直接使用Ajax、effects和queue模块Promise形式API较多),因此影响范围不大

1.9K90

JavaScript 异步编程指南 — 你不知道 Promise 前世 Deferred

当时,相对成熟 Dojo 流行方面可以与初出茅庐 Jquery 相媲美(争夺人气),虽然 Deferred 模式最早出现于 Dojo 代码,但被广为所知却来源于 Jquery 1.5 版本,这也是...Jquery 一个重要转折点,在这个版本之后引入了一个新功能 Deferred,它彻底改变了 Jquery 如何使用 Ajax,几乎重写了 Jquery Ajax 部分。...在上一节,我们讲到了早期我们都是通过使用回调(Callback)形式向服务器发起网络请求,随后通过注册回调函数拿到返回数据,当时我们也提到了基于 Callback 形式很容易造成回调函数嵌套、...Ajax Deferred 对象 Jquery 1.5 之前 ajax 书写方式: // 返回是 XHR 对象 $.ajax({ url: "http://openapi.xxxxxx.com...为了避免这种情况,jQuery 1.5 之后提供了 deferred.promise() 方法,作用是 deferred 对象上返回 deferred promise 对象,仅能使用与执行状态无关方法

97310

回调、使用Promise封装ajax()、Promise入门

一般来说,只要参数是一个函数,那么这个函数就是回调。 请看我写封装简易jQuery.ajax()successFN就是一个回调函数....代码都在这里 3.1 $.Ajax()promise 如果不使用promise,$.ajax请求时候成功和失败回调函数是写在参数里,他是对象参数一个值 $.ajax({ method...PS:ajax()函数参数里dataType:'json'//预期服务器返回数据类型,如果不写,就是响应里设置 即: ajax方法dataType:预期服务器返回数据类型。...4封装一个类似$.Ajax()Promise简易版本(皮毛,以后深入) 接下来回到我们自己封装jQuery.Ajax()代码.我们以此为基础继续来封装promise 以前封装代码在这里 也可以看我前一篇博客...,失败就调用then()函数第二个参数里函数 简单Promise原理: 自己封装后Ajax()返回一个new出来 Promise对象,一个Promise实例,这个Promise实例有一个then

3.3K51

你没有抓住 Promises 要点

这就解释了第一段关键:函数应当返回一个新 promise 对象。JQuery(1.8 以前版本)却不这么做。他们只是继续使用原有的 promise 对象,但是把它状态改变一下而已。...然而,不幸是,像 JQuery 这样类库却破坏了这条守则,它迫使丑陋 hack 代码去检测这些冒充 promises 对象—— 虽然 JQuery 依然 API 文档里面号称这是“promise...; } 如果 API 使用者坚持使用 JQuery promises 的话,你大概只有两种选择:执行过程莫名其妙地、令人困惑地失败,或者彻底失败,并且阻塞你继续使用整个类库。这可真糟糕啊。...值得注意是,写这篇文章时候,JQuery 最新版本是 1.9.1,它 promises 错误处理上实现是完全错误。...我希望接下去 JQuery 2.0 版本参考 Promises/A+文档,修正这个问题。

60310

JavaScript 设计模式学习第二十八篇- 链模式

通常情况下,通过对构造函数使用 new 会返回一个绑定到 this上新实例,所以我们可以 new 出来对象上直接用 . 访问其属性和方法。如果在普通函数返回当前实例,那么我们就可以使用 ....链模式不一定必须返回 this 方法不一定 return this,也可以返回其他对象,这样后面的方法可以对这个新对象进行其他操作。...比如在 Promise 实现,每次 then方法返回就不是 this,而是一个新 Promise,只不过其外观一样,所以我们可以不断 then下去。...源码链模式 3.1. jQuery 链模式 1. jQuery 构造函数 jQuery 方法看似复杂,可以简写如下: var jQuery = function (selector, context..._wrapped; }; 此处源码位于 underscore.js#L1668-L1670 总结一下,只要一开始调用了 chain方法, _chain这个标志位就会被置为 true,类似的方法返回值都用

57310

谈谈ES6前后异步编程

简单说,它思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。...由于Fetch模块返回是一个Promise对象,因此要用then方法调用下一个next 方法。...返回值是 Promise。 async函数返回值是 Promise 对象,这比 Generator 函数返回值是 Iterator 对象方便多了。你可以用then方法指定下一步操作。...Promise 基本用法就谈到这,更深入用法,请参考阮一峰ECMAScript 6 入门 特别需要指出ES6之前,promise是一套规范和原则,只要设计库复合规范要求就都可以算是promise...ES6后,将Promise 众多规范一种写入语言标准,ES6 Promise 是其中一种,各个 Promise 规范之间有细微差别(主要是特性上) 参考来源: ECMAScript 6 入门

77620

jQuerydeferred对象详解

通常做法是,为它们指定回调函数(callback)。即事先规定,一旦它们运行结束,应该调用哪些函数。 但是,回调函数方面,jQuery功能非常弱。...英语,defer意思是"延迟",所以deferred对象含义就是"延迟"到未来某个点再执行。 它解决了如何处理耗时操作问题,对那些操作提供了更好控制,以及统一编程接口。...前面部分ajax操作时,deferred对象会根据返回结果,自动改变自身执行状态;但是,wait()函数,这个执行状态必须由程序员手动指定。...; }); d.resolve(); // 此时,这个语句是无效 (运行代码示例9) 在上面的这段代码,wait()函数返回promise对象。...(2) deferred.done() 指定操作成功时回调函数   (3) deferred.fail() 指定操作失败时回调函数   (4) deferred.promise() 没有参数时,返回一个新

1.3K60

JS如何返回异步调用结果?

ES2015:使用Promise对象与then方法链式调用 第二种改进方案,不使用回调函数,而是使用ES2015新增Promise及其then方法,下面以示例二进行改造: function foo...jQuery成名在前,ES2015标准诞生之前,jQueryDeferredObject就已经被定义了。...Promise本身并没有神奇地方,它可以发挥作用,主要依赖JS,Object是引用对象,继承于Object原型Promise也是引用对象,当异步操作发起时,只有一个“空”Promise被创建了...小结 JS处理异步调用结果,最佳实践就是“异步转同步”:使用Promise + async/await语法关键字。...在这里async总是与await成对出现,一个async函数总是返回一个Promise,一个await关键字总是尝试“解开”一个Promise,结局要么等到有价值数据,要么异步出现异步,什么也没有等到

5.1K40

Promise机制

例如,使用Promise API执行异步调用远程服务,但是发起请求前你并不知道返回数据对象是什么样子,你可以创建一个Promise对象作为未来某个时间返回数据对象,在此期间, Promise对象扮演了真实数据代理角色...enqueue(task Function) 尽可能快地接下来事件循环调用 task 方法。 get(object, name) 返回一个获得对象属性 promise 。...makePromise(descriptor Object, fallback Function) 返回一个 promise 对象,该对象必须是一个可调用函数,也可能是可被实例化构造函数。...此外, Promises/A 规范,由 then 方法生成 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用那个回调是返回值还是抛出错误。... JQuery Promise 对象回调抛出错误是个糟糕主意,因为错误不会被捕获。

1.4K100

前端--理解 Promise 工作原理

接下来,你可以 Promise 对象上绑定一个回调函数,一旦真实数据变得可用这个回调函数将会被调用。 Promise 对象曾经以多种形式存在于许多语言中。...makePromise(descriptor Object, fallback Function) 返回一个 promise 对象,该对象必须是一个可调用函数,也可能是可被实例化构造函数。...5. promiseSend方法可能接受变参 6. promiseSend方法必须返回undefined 对 Promises/B 规范补充 Promises/D 规范对 Promises/B 规范定义...此外, Promises/A 规范,由 then 方法生成 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用那个回调是返回值还是抛出错误。... JQuery Promise 对象回调抛出错误是个糟糕主意,因为错误不会被捕获。

1.4K60

Promises机制

例如,使用Promise API执行异步调用远程服务,但是发起请求前你并不知道返回数据对象是什么样子,你可以创建一个Promise对象作为未来某个时间返回数据对象,在此期间, Promise对象扮演了真实数据代理角色...enqueue(task Function) 1 尽可能快地接下来事件循环调用 task 方法。 get(object, name) 1 2 返回一个获得对象属性 promise 。...makePromise(descriptor Object, fallback Function) 返回一个 promise 对象,该对象必须是一个可调用函数,也可能是可被实例化构造函数。...此外, Promises/A 规范,由 then 方法生成 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用那个回调是返回值还是抛出错误。... JQuery Promise 对象回调抛出错误是个糟糕主意,因为错误不会被捕获。

71640

Promise机制详解

例如,使用Promise API执行异步调用远程服务,但是发起请求前你并不知道返回数据对象是什么样子,你可以创建一个Promise对象作为未来某个时间返回数据对象,在此期间, Promise对象扮演了真实数据代理角色...如果 then 不是函数,以 x 为参数执行 promise 如果 x 不为对象或者函数,以 x 为参数执行 promise 如果一个 promise 被一个循环 thenable 链对象解决,...enqueue(task Function) 尽可能快地接下来事件循环调用 task 方法。 get(object, name) 返回一个获得对象属性 promise 。...此外, Promises/A 规范,由 then 方法生成 Promise 对象是已执行还是已拒绝,取决于由 then 方法调用那个回调是返回值还是抛出错误。... JQuery Promise 对象回调抛出错误是个糟糕主意,因为错误不会被捕获。 最后一个例子揭示了,实现 Promise 关键是实现好 doResolve 方法,完事以后触发回调。

1.5K70

jQuerydeferred对象详解

开发,我们经常遇到某些耗时很长javascript操作。其中,既有异步操作(比如ajax读取服务器数据),也有同步操作(比如遍历一个大型数组),它们都不是立即能得到结果。...jQuery开发团队就设计了deferred对象,来作为回调函数解决方案。...; } }); $.ajax()操作完成后,如果使用是低于1.5.0版本jQuery返回是XHR对象,你没法进行链式操作;如果高于1.5.0版本,返回是deferred对象,可以进行链式操作...; }); 上述示例,提及到了deferred.resolve()。说明其作用需要先说一下jQuery规定deferred对象三种执行状态:未完成、已完成和已失败。...解决上述“全局变量”问题:我们使用deferred.promise() 其作用:原来deferred对象上返回Promise对象,后者只开放与改变执行状态无关方法(比如done()方法和fail

99231

每天3分钟,重学ES6-ES12(十五)异步代码处理方案

,重学ES6+,前面我们介绍了promise,生成器和迭代器,async await,现在我们总结一下针对异步代码处理方案 业务场景 请求一个接口,拿到返回值,对返回值进行处理,当作第二个接口请求参数...executor return new Promise((resolve, reject) => { // 模拟网络请求 setTimeout(() => { // 拿到请求结果...方案四 Promisethen返回值来解决回调问题 requestData("why").then(res => { return requestData(res + "aaa") }).then...try catch才能捕获到异常 业务使用 Promise + async/await async/await是基于generator语法糖,返回也是一个promise,所以返回值可以调用promise...可以梳理平常业务代码 更容易理解拆分业务 ,而generator 适用于需要暂停业务逻辑,promise 适用于 构建通用异步函数

36610

33·灵魂前端工程师养成-异步与promise

(回调) # 2.QQ离线发送文件。 以上是生活例子,那么我们接下来以代码为例子。...# 但回调函数不一定只用在异步任务里 # 回调可以用到同步任务里 # array.forEach(n=>console.log(n))就是同步回调 ---- 如何判断一个函数时异步还是同步 如果一个函数返回值处于下面几种情况...// 返回了一个含有.then()方法对象呗 // 那么再请问,如何得到这和个含有.then()对象呢?...,搜索ajax找到jQuery.ajax,看看参数说明,然后直接看代码示例,看看jQuery封装,就知道自己封装有多么辣鸡了。...封装优点: 支持更多形式参数 支持Promise 支持功能超多 我们需要掌握jQuery.ajax嘛?

89630

ES6笔记(7)-- Promise异步编程

/ Promise形式 $.get('url').success(function(rs) { rs = JSON.parse(rs); }) 不过jQueryPromise并不是完全按照...getContent(rs.user)这个promise对象,继续接下去执行任务 除了直接返回这个新promise对象,我们也可以直接返回一个数据,这个数据将会作为下一函数调用时参数,且看例子:...或catch方法来监视log(6)状态,所以仅仅输出log函数执行结果 Promise.resolve()方法 除了实例化Promise构造函数内部使用resolve之外,我们还可以直接调用...= Promise.resolve($.get('url')); 前文说到jQueryPromise实现方式并不是完全按照规范来着,通过Promise.resolve包装,可以返回一个规范化Promise...()方法 除了实例化Promise构造函数内部使用reject之外,我们还可以直接调用reject方法 类似于Promise.resolve()参数多样化,且看以下几个栗子: Promise.resolve

62510
领券