const

在微信小程序中使用 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 可以同样逻辑的代码看起来舒服得多。不过默认情况下,“微信开发者工具”并不支持

node读取docx文件并写入数据库

徘徊边缘 提交于 2020-03-10 10:50:32
const mysqlx = require("@mysql/xdevapi"); const path = "E:\\微信文档\\WeChat Files\\mxds123456\\FileStorage\\File\\2020-03\\101-200"; const fs = require('fs'); const iconv = require("iconv-lite"); var mammoth = require("mammoth"); fs.readdir( path, (err, files)=> // 读取文件夹下所有文件名(返回数组) { if(files.length > 0) { console.log(files.length); files = files.splice(6, 93); console.log(files.length); for(let i = 0; i < files.length; i++) { { const pathContent = `${path}\\${ files[i] }`; console.log(pathContent); mammoth.extractRawText({path: pathContent}) //读取docx文件 .then(function(result) { execute_mysql(

C++并发编程(CH03)[用mutex来保护共享数据-01&02]

与世无争的帅哥 提交于 2020-03-10 10:21:45
Problems with sharing data between threads 如果多个线程只是并发的读数据.这不会导致竞争. Race conditions 有的写竞争也不会导致严重的问题.比如往同一个队列中push对象的时候.谁先谁后其实不重要. 但是为了修改链表的竞争就非常严重了.会导致不明确行为. Avoiding problematic race conditions 加锁机制. 无锁编程.非常高级且复杂的方法. 采用software transactional memory,也就是对操作记录log的方式。然后要么一次性执行要么不执行。本书不包含字部分内容,比如A和B同时在修改,不同副本。但是A提交在先。那么B会读取日志文件。然后在稍后的操作中根据A的修改再次执行B的操作) Protecting shared data with mutexes Using mutexes in C++ 直接使用mutex的lock和unlock不是太好,因为你很可能忘记unlock.所以最好使用std::lock_guard,它可以自动的在函数体内加锁和退出时的解锁。 #include <list> #include <mutex> #include <algorithm> std::list<int> some_list; std::mutex some_mutex; void

scanf与printf用法详解

ⅰ亾dé卋堺 提交于 2020-03-10 09:10:36
一、scanf家族 1、scanf家族的原型 int scanf(char const *format,...); int fscanf(FILE *stream,char const *format,...); int sscanf(char const *buffer,char const *format,...); 每个原型中的省略号表示一个可变长度的指针列表。从输入转换而来的值逐个存储到这些指针指向的内存位置。由于C的参数传递都是传值调用决定了可变参数都是指针列表。注意:若给的不是指针,而是变量值。scanf将把变量值当做指针,在进行解引用时或者导致程序终止,或者导致不可预料的内存位置的数据被改写。 2、返回值 当格式化字符串format到达末尾或者读取的输入不再匹配格式字符串所指定的类型时,输入就停止,并返回被转换的输入值的数目,若在任何输入都没被转换之前文件就到达尾部则返回EOF。 3、类型的匹配 由于scanf是采用可变参数的机制,所以函数无法验证它们的指针参数是否为正确的类型,所以函数假定它们是正确的,(因此格式字符必须和后面的指针指向的类型保持一致)如果指针参数的类型和输入数据的类型不匹配则结果值就是垃圾。而且邻近的变量也有可能被改写。例如: float a; scanf("%d",&a); //本来a是一个float数据,却用一个整形指针指向变量a。 4

C++笔记(六)——I/O&异常

荒凉一梦 提交于 2020-03-10 05:16:32
iostream 标准库 提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。 · 标准库 fstream 定义了三个新的数据类型用于文件的访问。 · open() 函数 是 fstream、ifstream 和 ofstream 对象的一个成员。open() 成员函数的 第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式 。可以把以上两种或两种以上的模式结合使用。 void open ( const char * filename , ios :: openmode mode ) ; //以写入模式打开文件,并希望截断文件,以防文件已存在 ofstream outfile ; outfile . open ( "file.dat" , ios :: out | ios :: trunc ) ; //打开一个文件用于读写 ifstream afile ; afile . open ( "file.dat" , ios :: out | ios :: in ) ; · close() 函数 用于关闭文件(通常应该在程序结束前关闭),close() 函数是 fstream、ifstream 和 ofstream 对象的一个成员。 void close ( ) ; ·使用流插入运算符( << )向文件写入信息,使用的是 ofstream 或

Vuex热更替功能

微笑、不失礼 提交于 2020-03-10 03:25:59
修改state, mutations, getters 等配置时,不触发页面刷新 store.js import Vuex from 'vuex' import defaultState from './state/state' import mutations from './mutations/mutations' import getters from './getters/getters' import actions from './actions/actions' export default () => { const store = new Vuex.Store({ strict: true, //禁止在非mutations内修改data的数据 state: defaultState, mutations, getters, actions }) if (module.hot) { module.hot.accept([ './state/state', './mutations/mutations', './getters/getters', './actions/actions' ], () => { const newState = require('./state/state').default const newMutations = require('.

ecma6

萝らか妹 提交于 2020-03-10 02:47:36
1、什么是ECMA6 1.ECMAScript 6.0 (简称 ES6)是 JavaScript 语言的下一代标准,在2015年6月正式发布。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 2.ECMA6的缺点: 只有2015后出的浏览器版本,才有可能兼容ECMA6语法。 3、为什么要学习ECMA6 ①ES6中引入的语言新特性,更具规范性,易读性、方便操作、简化了大型 ②项目开发的复杂程度、降低了出错概率,提升了开发效率。大部分公司(不代表所有,代表着一个趋势)都在用ES6开发。 下面我们一起看下ECMA6的常用语法 ECMA6语法 1、EMCA6新增两个关键字 let const 声明变量 var关键字和let和const关键字声明变量到底有什么区别? ①let和const不允许重复声明变量。 let num1 = 10; let num1 = 10; alert(num1); //报错 const num2 = 10; const num2 = 10; alert(num2); //报错 ②let和const声明的变量不会进行声明提升。(通过let声明变量,之前的区域,叫做暂时性死区) var 的情况: console.log(num); //输出undefined var unm =10; let 的情况: console

HDU 5884 Sort (二分+k叉哈夫曼树)

北城余情 提交于 2020-03-09 20:04:58
题意: n 个有序序列的归并排序.每次可以选择不超过 k 个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过 T , 问 k 最小是多少。 析:首先二分一下这个 k 。然后在给定 k 的情况下,这个代价其实就是 k 叉的哈夫曼树问题。然后用两个队列维护一下就好。 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <set> #include <queue> #include <algorithm> #include <vector> #include <map> #include <cctype> #include <cmath> #include <stack> #define freopenr freopen("in.txt", "r", stdin) #define freopenw freopen("out.txt", "w", stdout) using namespace std; typedef long long LL; typedef

JavaScript中var、let、const三者的区别

元气小坏坏 提交于 2020-03-09 19:00:57
文章目录 var var定义变量存在的问题 let const var 在ES6发布之前,JavaScript的作用域有 全局作用域 和 函数内部作用域 两部分,没有 块级作用域 一说。 块级作用域 一般由{ }包括,if 和 for 里的{ }同样为块级作用域。 初学JS最常见的变量修饰符就是var了,var定义的变量区别也主要体现在全局变量和局部变量上。 var在函数外部声明的变量作用域为全局,在任何地方都可以访问; var在函数内部声明的变量仅作用在函数内部,如果不用var则是全局变量。 // 函数内部用var修饰,外部不能使用 function methodOne(){ var a = "Tom"; } var a = "Tom"; function methondTwo(){ console.log(a);//var定义全局变量,函数内部能够使用。 } var定义变量存在的问题 块级作用域外扔能使用 for(var i = 0; i < 2 ; i++){ var a = "a"; } console.log(a); 跳出 for 循环后仍旧能访问变量 a 以及变量 i 。 循环内变量的过度共享 for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) }, 1000); }

如何部署单页面项目到服务器

耗尽温柔 提交于 2020-03-09 17:04:46
今天做vue单页项目,在本地dev环境下一切正常,准备部署到生产环境,结果发现页面一片空,想了许久,都不知道是什么问题。后来和后台同事交流,发现我的页面并不是在服务器根目录,而是由子目录。 后来才想起来曾经看过的一篇文章,内容如下: 最近好多伙伴说,我用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接访问index.html页面空白,刷新当前路由404......用react做的项目也同样遇到类似问题。现在我们一起讨论下单页面如何部署到服务器? 由于前端路由缘故,单页面应用应该放到nginx或者apache、tomcat等web代理服务器中,千万不要直接访问index.html,同时要根据自己服务器的项目路径更改react或vue的路由地址。 如果说项目是直接跟在域名后面的,比如:http://www.sosout.com ,根路由就是 '/'。 如果说项目是直接跟在域名后面的一个子目录中的,比如:http://www.sosout.com/children ,根路由就是 '/children ',不能直接访问index.html。 以配置Nginx为例,配置过程大致如下:(假设: 1、项目文件目录: /mnt/html/spa(spa目录下的文件就是执行了npm run dist 后生成的dist目录下的文件) 2、访问域名: spa.sosout.com