async

Node.js的异步编程

冷暖自知 提交于 2020-03-12 02:54:35
Node.js异步编程的模式 异步编程的线程容易发生冲突问题,很容易陷入回调地狱,可用下面几个方式解决一下。 1.回调函数 1)回调套回调 const fs = require ( 'fs' ) fs . readFile ( 'index.html' , 'utf8' , ( err , data ) => { if ( err ) throw err console . log ( data ) fs . readFile ( 'list.html' , 'utf8' , ( err , data ) => { if ( err ) throw err console . log ( data ) fs . readFile ( 'detail.html' , 'utf8' , ( err , data ) => { if ( err ) throw err console . log ( data ) } ) } ) } ) 2)Promise对象 const fs = require ( 'fs' ) function p1 ( ) { return new Promise ( async ( resolve , reject ) => { fs . readFile ( 'index.html' , 'utf8' , ( err , data ) => { resolve

在微信小程序中使用 async/await

痴心易碎 提交于 2020-03-10 13:19:08
微信小程序中有大量接口是异步调用,比如 wx.login() 、 wx.request() 、 wx.getUserInfo() 等,都是使用一个对象作为参数,并定义了 success() 、 fail() 和 complete() 作为异步调用不同情况下的回调。 但是,以回调的方式来写程序,真的很伤,如果有一个过程需要依次干这些事情: wx.getStorage() 获取缓存数据,检查登录状态 wx.getSetting() 获取配置信息, wx.login() 使用配置信息进行登录 wx.getUserInfo() 登录后获取用户信息 wx.request() 向业务服务器发起数据请求 …… 那么,代码大概会长这样 wx.getStorage({ fail: () => { wx.getSetting({ success: settings => { wx.login({ success: ({ code }) => { wx.getUesrInfo({ code, success: (userInfo) => { wx.request({ success: () => { // do something } }); } }); } }); } }); } }); 显然,async/await 可以同样逻辑的代码看起来舒服得多。不过默认情况下,“微信开发者工具”并不支持

C# Task的简单使用

我与影子孤独终老i 提交于 2020-03-10 12:08:14
先看个小例子... 1 static void Main(string[] args) 2 { 3 var task = new Task(() => 4 { 5 Console.WriteLine("task start...."); 6 Thread.Sleep(2000); 7 Console.WriteLine("task end...."); 8 }); 9 task.Start(); 10 Console.WriteLine("main start...."); 11 Thread.Sleep(1000); 12 Console.WriteLine("main end...."); 13 Console.ReadLine(); 14 } 看下输出,可以发现在main的方法与task中的方法应该是同时运行,也就是我们所说的异步执行。 当我们使用async关键字的时候,就告诉程序该方法为异步方法,我们使用await来等待异步方法,看一下代码... public async void Async() { await Task.Run(() => { Console.WriteLine("task start.."); /****/ Console.WriteLine("task end.."); }); } 来源: https://www.cnblogs.com

async.mapLimit 控制并发数量

巧了我就是萌 提交于 2020-03-10 05:14:00
async无论我们在哪里接受Node样式的回调函数,异步都接受函数。但是,我们不向它们传递回调,而是使用返回值并处理所有的Promise拒绝或引发的错误 const async = require ( 'async' ) ; ( async ( ) = > { // 支持数组格式 let list = [ { 'url' : '1' , } , { 'url' : '2' , } ] ; //数字10是并发数量 async.mapLimit ( list, 10, async item = > { // < - no callback ! let data = await toUrl ( item ) ; return data ; // < - return a value ! } , ( err, contents ) = > { if ( err ) throw err ; console.log ( contents ) ; } ) ; } ) ( ) ; async function toUrl ( item ) { // 。。。 写处理逻辑 console.log ( item ) ; return '处理完成' ; } 文档来源:https://caolan.github.io/async/v3/ 来源: CSDN 作者: 〆 链接: https://blog

ES6学习笔记之async函数

走远了吗. 提交于 2020-03-09 17:28:51
async函数跟promise,generator一样也是处理异步的,但是async的写法更为简洁 大家可以先来看下async的特点: 1、语义化强,async就是异步的,await就是等待,很好理解 结构就是async function a(){   await xxx } 2、await要放在async组合使用,不能跟其他函数搭配 3、async函数返回的是一个Promsie对象,所以后面还可以跟then这些搭配使用 4、如果async里面的promise是reject,那么后面的代码就不会再执行了 举个栗子: async function fn(){   await Promise.reject("出大事了!!");   let a = await Promise.resolve("很棒!");   console.log(a); } fn.().then(res=>{   console.log(res); }),catch(err=>{   console.log(err) }) //输出:出大事了 在这个例子中,async跟await搭配使用,因为在fn里面先执行了promise.reject,所以下面的“很棒”就不会再执行了,假如将这个两个的顺序调换一下,先resolve,再reject,则最后两个结果都能够输出 async在处理读取文件上尤为出色

iOS中实现多线程的技术方案

老子叫甜甜 提交于 2020-03-08 10:02:59
pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { NSLog(@"---buttonclick---%zd---%@", i, [NSThread currentThread]); } return NULL; } @implementation ViewController - (IBAction)clickButton:(id)sender { // 定义一个线程 pthread_t thread; // 创建一个线程 (参1)pthread_t *restrict:创建线程的指针,(参2)const pthread_attr_t *restrict:线程属性 (参3)void *(*)(void *):线程执行的函数的指针,(参4)void *restrict:null pthread_create(&thread, NULL, run, NULL); // 何时回收线程不需要你考虑 pthread_t thread2; pthread_create(&thread2, NULL, run, NULL); } NSThread实现多线程 一个 NSThread 对象就代表一条线程 创建线程的多种方式 第一种方式:先创建再启动线程 // 创建线程

关于iOS多线程的总结

笑着哭i 提交于 2020-03-08 10:01:16
关于iOS多线程的总结 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案例,在实际使用中感受它们的区别。还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园。OK,let's begin! 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问题,这些我们应该都知道的。 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads NSThread GCD NSOperation & NSOperationQueue 所以接下来,我会一一讲解这些方案的使用方法和一些案例。在将这些内容的时候,我也会顺带说一些多线程周边产品。比如: 线程同步 、 延时执行 、 单例模式 等等。 Pthreads 其实这个方案不用说的,只是拿来充个数,为了让大家了解一下就好了。百度百科里是这么说的: POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。 简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强

ASP.NET Core:中间件

*爱你&永不变心* 提交于 2020-03-08 01:10:55
一、什么是中间件 我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终才会到达我们写的代码中。而中间件就是用于组成应用程序管道来处理请求和响应的组件。管道内的每一个组件都可以选择是否将请求转交给下一个组件,并在管道中调用下一个组件之前和之后执行某些操作。请求委托被用来建立请求管道,请求委托处理每一个HTTP请求。 中间件可以认为有两个基本的职责: 选择是否将请求传递给管道中的下一个中间件。 可以在管道中的下一个中间件前后执行一些工作。 请求委托通过使用IApplicationBuilder类型的Run、Map以及Use扩展方法来配置,并在Startup类中传给Configure方法。每个单独的请求委托都可以被指定为一个内嵌匿名方法,或其定义在一个可重用的类中。这些可以重用的类被称作“中间件”或“中间件组件”。每个位于请求管道内的中间件组件负责调用管道中下一个组件,或适时短路调用链。中间件是一个典型的AOP应用。 ASP.NET Core请求管道由一系列的请求委托所构成,它们一个接着一个的被调用,看下面一张微软官方的中间件请求管道图(图中执行线程按黑色箭头的顺序执行): 中间件短路:每一个委托在下一个委托之前和之后都有机会执行操作。任何委托都能选择停止传递到下一个委托,而是结束请求并开始响应,这就是请求管道的短路

快速掌握ES6 iterator Generator和async 之间的关系及其用法

﹥>﹥吖頭↗ 提交于 2020-03-05 23:17:38
1.遍历器iterator 1.1 for遍历 首先从远古讲起,刚出js的时候如何遍历一个数组呢? var arr = [1, 2, 3, 4, 7, 8, 9] for (let i = 0;i < arr.length;i++) { console.log(arr[i]); } 1.2 forEach遍历 看起来笨的一批,所以ES5给你研究了一个foreach方法,但是这个方法不能break,也不能改变数组自身的值,也不能返回任何值。 var arr = [1, 2, 3, 4, 7, 8, 9] var arr2 = arr.forEach((element, index) => { console.log('第' + index + '个数值为:' + element); return element * 2; }); console.log(arr2) // undefined console.log(arr1) // [1, 2, 3, 4, 7, 8, 9] 所以说foreach只给你最基本的操作,其他一概不管,如果你想要改变自身的值或者有break和countinue操作我们可以使用map操作,不展开讲了,之前专门写了篇博客总结了下。 wzr: 数组遍历方法总结 1.3 for-in遍历 那么ES6专门为遍历数组提供了一种方法,就是for-of。说道for-of

Spring中@Async注解实现异步 转

馋奶兔 提交于 2020-03-05 10:38:28
出处: Spring中@Async注解实现异步   异步执行一般用来发送一些消息数据,数据一致性不要求太高的场景,对于spring来说,它把这个异步进行了封装,使用一个注解就可以实现。   Spring中通过在方法上设置 @Async 注解,可使得方法被异步调用。也就是说该方法会在调用时立即返回,而这个方法的实际执行交给Spring的TaskExecutor去完成。 用法   程序启动时开启 @EnableAsync 注解 建立新的类型,建立 异步方法 ,为方法添加 @Async 注解 在业务代码中, @Autowired 注入你的类型,使用它即可 我们可以关注到在配置task的时候,是有参数让我们配置线程池的数量的。因为这种实现方法,所以在同一个类中的方法调用,添加@async注解是失效的!,原因是当你在同一个类中的时候,方法调用是在类体内执行的,spring无法截获这个方法调用. 事例 Spring的配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www