promise Eslint sql传参方式 async-await
这是一篇学习笔记 各种融合的杂谈
Eslint学习
官网
中文教程
安装Eslint
npm i eslint@latest g配置文件 .eslintrc.json
eslint --initeslint test.js
1:5 error 'username' is assigned a value but never used no-unused-vars 3:4 error Expected a conditional expression and instead saw an assignment no-cond-assign 3:4 error Unexpected constant condition no-constant-condition 3:4 error 'a' is not defined no-undef 4:5 error Unexpected console statement no-console 7:5 error 'age' is assigned a value but never used no-unused-vars 9:1 error 'number' is not defined no-undef
安装vscode eslint插件 ESLint
nodejs数据库操作
sql传参方式
- 字符串拼接
var id = 10;var sql = "SEELCT * FROM user WHERE id = '+id+'";
- 占位符
var id = 10;var sql = "SEELCT * FROM user WHERE id = ?";var param = [id];query(sql,param,function(err,data){});
nodejs处理查询结果
var sql = "SELECT id,username,password FROM user WHERE username = ?";var param = ['小明'];// 1. SEELCT查询返回对象data是一个数组对象query(sql, param, function (err, data) {if (err) {console.log('查询用户出错!');return;}for(var i = 0; i < data.length; i++){console.log(data[i].username+ " "+data[i].password);}});
后台管理管理系统集成数据库
- 下载安装mysql第三方包
npm i mysql --save - 数据库操作模块引入 dbconnect.js
- 路由跳转处代替数组
遇到问题
- 封装的query函数 在关闭连接之后未重新创建
/*** 封装通用数据库操作函数*/
function query(sql, param,callFunction) {//1. 配置数据库连接参数,创建连接对象var connection = mysql.createConnection({host: '192.168.41.118',port: 3306,user: 'test',password: 'web1804',database: 'usermanager'});//1. 建立连接connection.connect();// 2. 发送SQL语句到mysql服务端执行connection.query(sql, param, callFunction);// 3. 关闭连接connection.end();
}
Promise
什么是promise?
Promise是JavaScript中的一个对象,“承诺将来会执行”,它以更优雅的方式实现javascript中的异步回调操作。
Promise本意是承诺,在程序中的意思就是承诺我过一段时间后会给你一个结果。 什么时候会用到?答案是异步操作,异步是指可能比较长时间才有结果的操作,例如网络请求、读取本地文件等
1.Promise的三种状态
- Pending----Promise对象实例创建时候的初始状态
- Fulfilled----可以理解为成功的状态
- Rejected----可以理解为失败的状态
为什么要学习promise?
Javascript是一种单线程的语言, 所有的代码必须按照所谓的“ 自上而下” 的顺序来执行。 本特性带来的问题, 在处理耗时操作时, 程序会阻塞, 这时需要使用异步编程;
异步编程的一种实现方式就是回调函数;
回调函数是 一个 解决方案, 但它并不完美。 两个很大的问题是:
- 颠倒的控制;
- 糟糕的错误处理.
- 异步任务回调嵌套.
回调嵌套或回调地狱
fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());fs.readFile(filename, function (err, data) {if (err) {console.log('读文件出错' + err);} else {console.log(data.toString());}});}});}
});
- promise基础使用?
var promise = new Promise(function(resolve,rejcted){//具体异步 db.query(sql,parameter,function(err,data){if(err){rejected(err);} else{resove(data);}});
}); promise.then(function(data){console.log(data); //成功兑现
}).catch(function(err){//处理错误
});
async-await
使用async/await,你可以轻松地达成之前promise做到的工作,它有如下特点:
- async/await是基于Promise实现的,它不用于普通的回调函数。
- async/await与Promise一样,是非阻塞的。
- async/await使得异步代码看起来像同步代码,这正是它的魔力所在。
示例
var fs = require('fs');function readFilePromise(path) {return new Promise(function (resolved, rejected) {fs.readFile(path, function (err, data) {if (err) {rejected(err);} else {resolved(data.toString());}});});
}async function readFile(){var data1 = await readFilePromise('hello.txt');console.log('data1 :'+data1);var data2 = await readFilePromise('hello1.txt');console.log('data2 :'+data2);var data3 = await readFilePromise('hello2.txt');console.log('data3 :'+data3);
}readFile();
- try-catch-finally
var fs = require('fs');
var path = require('path');console.log('开始');
try {// 可能会发生异步的代码var path1 = path.join(path.resolve('.'), '08await','./hello.txt');var fileContent1 = fs.readFileSync(path1);console.log(fileContent1.toString());var path2 = path.join(path.resolve('.'), '08await', './hello1 1.txt');var fileContent2 = fs.readFileSync(path2);console.log(fileContent2.toString());var path3 = path.join(path.resolve('.'), '08await', './hello2.txt');var fileContent3 = fs.readFileSync(path3);console.log(fileContent3.toString());} catch (err) {// 处理异步的代码console.log('处理异步的代码 :' + err);
} finally {//最终都会执行的代码console.log('最终都会执行的代码');
}console.log('结束');
- Promise异步任务并发执行
Promise.all
Promise.race
示例
var fs = require('fs');function readFilePromise(path) {return new Promise(function (resolved, rejected) {fs.readFile(path, function (err, data) {if (err) {rejected(err);} else {resolved(data.toString());}});});
}
// 最后一个异步任务执行完之后一起处理
Promise.all([readFilePromise('hello.txt'), readFilePromise('hello1.txt'), readFilePromise('hello2.txt')]).then(function (data) {console.log('data :' + data);});// 处理执行速度最快的异步任务
Promise.race([readFilePromise('hello.txt'), readFilePromise('hello1.txt'), readFilePromise('hello2.txt')]).then(function (data) {console.log('data :' + data);});
promise封装ajax
function ajaxPromise(json) {return new Promise(function(resolved,rejected){// 1. 获取 XmlHttpRequestvar xhr = getXHR();// 2. 打开连接发送请求xhr.open(json.method, json.url, true);xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); // 请求头部xhr.send(json.content);// 3. 处理响应xhr.onreadystatechange = function (e) {// 根据就绪码判断响应是否完成if (e.target.readyState === 4) {// 根据状态码判断成功失败if (e.target.status === 200) {resolved(e.target.responseText);}else{rejected('响应出错! 错误码: '+e.target.status);}}};});
}function getXHR() {if (window.XMLHttpRequest) {return new window.XMLHttpRequest;} else {// 兼容IE浏览器低版本new window.AtiveXObject('Microsoft.XMLHTTP');}}
注册里面调用封装的ajaxPromise
var param = {method:'get',url:'/checkuser?username='+userInput.value};ajaxPromise(param).then(function(data){var jsonObj = JSON.parse(data);if(jsonObj.code === 1){isCheckSucess = false;span.style.color = 'red';span.innerHTML = jsonObj.msg; }else{isCheckSucess = true;span.innerHTML=''; }}).catch(function(err){console.log(err);});
}
fetch方法的使用
var promise = fetch('/checkuser?username='+userInput.value);promise.then(function(res){if(res.ok){return res.json(); // 将响应内容流转为json对象,以promise形式返回}else{// 失败处理return Promise.reject('响应出错 :'+res.status +' '+res.statusText);}}).then(function(data){// console.log('data :'+JSON.stringify(data));// var jsonObj = JSON.parse(data);if(data.code === 1){isCheckSucess = false;span.style.color = 'red';span.innerHTML = data.msg; }else{isCheckSucess = true;span.innerHTML=''; }}).catch(function(err){console.log(err);});}
promise Eslint sql传参方式 async-await相关推荐
- Deno 几种常用的传参方式
视频讲解: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=8 我们一起来完成以下步骤: 以key-value方式传参 以value方式传参 使用oak ...
- 任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet
任务(多线程并行)TFDMemTable内存表传参方式调用服务器返回的TDataSet 服务器端: function TServerMethods1.getTFDDataSet ( const p ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
- Android:页面跳转传参方式一,页面跳转传参方式二
一.页面跳转传参方式一 跳转的过程如何传参:也就是页面之间如何传递参数,有点像函数调用如何传参,页面跳转也要传参. 复制一个工程 你要跳转,(现在的代码如下),intent 既然能设置跳转到哪个页面 ...
- mybatis传入数组怎么写_推荐的MyBatis传参方式List、数组等
MyBatis 推荐的传参方式 如果要详细的学习 MyBatis,推荐看这个教程:https://www.w3cschool.cn/mybatis/ 1. 单个参数//接口方法int getAgeBy ...
- Python函数传参方式超级大汇总
位置参数 位置参数传递是最为简单的传递方式,按照函数参数的位置顺序逐个匹配传入,传入参数的个数必须与函数参数个数一致. 见示例1,根据位置顺序进行匹配,a,b,c分别赋值为2,3,4 示例1 def ...
- 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历...
1 /************************************************************************* 2 > File Name: messa ...
- Spring Boot 传参方式
2019独角兽企业重金招聘Python工程师标准>>> 最近在搞Spring Boot的项目,把传参方式总结一下.网上也参考一些文章,总结的很不错,这里借鉴一下. 注解 @Reque ...
- axios链接带参数_axios常见传参方式
1:get请求 一般发送请求是这么写 axios.get('/user?id=12345&name=user') .then(function (res) { console.log(res) ...
最新文章
- pthread_cond_wait() 函数的使用
- php mysql网站导航跳转_PHP微信公众平台跳转网页实现定位思路 By:阿尚
- 两边放动物对战守城的游戏_集合啦!动物森友会定制周边;百战天虫 大混战发布...
- VNX证书过期解决方案(2018-11-02)
- Leetcode 344. 反转字符串 解题思路及C++实现
- Javascript编写的简易计算器
- 玩转spring boot——结合redis
- Duilib教程-控件练习
- Access 时间比较错误
- java传输文件暂停_java – 在文件下载中实现暂停/恢复
- 一张图学会python 3_一张图学会Python?想啥呢?!
- OPPO推送:怎样开通?
- 解决:‘webpack-dev-server‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
- 侧方位停车技巧图解 教你快速便捷停车(图)
- ICPC World Finals 2015 D题 - Cutting Cheese 【二分答案】【球缺体积公式】
- WebSocket服务端消息推送
- 苏阳乐队杭州巡演后记
- 乔戈里推荐的新版Java学习路线,开源!
- 重庆计算机专业在职研究生,重庆师范大学在职研究生计算机专业教学方式
- java秒表程序_运用Java编写 秒表程序
热门文章
- 结构体所占字节数的计算
- 徐无忌MySQL笔记:MySQL数据库锁有几种?实现原理是什么?
- redis内存回收——过期、淘汰
- android 程序中设置默认输入法
- 为Synaptics驱动的触摸板安装精确式触摸板
- cmdb python 采集虚拟机_CMDB学习之八,完成所有资产采集信息的收集
- linux centos 访问根目录 not accessable
- __ratelimit: XXX callbacks suppressed
- 2022-09-12 mysql语法分析实现
- 宏源药业上市破发:跌幅16% 公司市值168亿超募17亿