nodejs_promise用法

nodejs_promise用法

​ 在使用promise之前,首先了解js的运行环境是单线程的,必须按照’流水线’的方式来工作,如果有多个任务就得排队。

promise可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,promise对象提供统一的接口,使得控制异步操作更加容易。

(promise就是为了)

​ promise无法取消,一旦建立就会立即执行,无法中途取消。而且,如果不设置回调函数,promise内部抛出的错误不会反映到外部。当处于Pending(adj.待定的,悬而未决的)状态时,无法得知进展到哪个阶段。’

1)promise有三个状态:

Pending-promise的初始状态,等到任务完成或是被拒绝;Resolved-执行完成并且成功的状态;Rejected-执行完成并且失败的状态。此三个状态不能相互逆转。

2)promise对象必须实现then方法,可以说then是promise的核心,而且then方法必须返回一个promise对象,同一个promise对象可以注册多个then方法,并且回调的执行顺序和他们注册的顺序一致。

3)then方法接收两个回调函数,他们分别是成功时的回调和失败时的回调。

let promise = new Promise(function(resolve,reject) {
    setTimeout(function(){
        resolve('111');
        console.log(promise);
    },2000)
})
//then
promise.then(function(value){
    consolelog('回调执行成功后的操作',value);
},function(){
    console.log('回调执行失败后的操作');
})

value值表示的是异步执行成功之后在promise函数中获取的值,不确切的说就是可以获取该函数的私有变量,将promise的值获取过来之后在then中可以实现值的相应应用。

promise 加上 await/async 就是能实现 —— 异步等待

async function demoAwaitAndPromiseAndAsync() {
    let result = await demoPromise();//promise 前加上 await,就异步阻塞了,其实就这么理解,告诉cpu,我这边要阻塞了,
                                  //你先去忙别的事情,我这边一定要等这个结果出来,才能完成操作
                                  //await只能出现在 async 函数内部,你不信,你把这个函数的 async 去掉试试......
                                  //demoPromise 返回值 resolve 或是 reject 的值
  console.log('我在函数的最上面');
  console.log(result);
  console.log('我在函数的最下面1');
  console.log('我在函数的最下面2');
  console.log('我在函数的最下面3');
}
demoAwaitAndPromiseAndAsync();
console.log('我是函数demoAwaitAndPromiseAndAsync 下面的输出代码哦,你猜猜我怎么执行');
console.log('我是函数demoAwaitAndPromiseAndAsync 下面的输出代码哦,你猜猜我怎么执行');

输出:

我是函数demoAwaitAndPromiseAndAsync 下面的输出代码哦,你猜猜我怎么执行

我是函数demoAwaitAndPromiseAndAsync 下面的输出代码哦,你猜猜我怎么执行

Promise { ‘我不遵守了诺言,工资都不给你了’ }

我在函数的最上面

111

我在函数的最下面1

我在函数的最下面2

我在函数的最下面3


用promise 与 await 去实操一个mysql 的封装在项目中,数据库查询是必不可少的,数据库的优化是后端人员提升的一个标致

let mysql = require("mysql");

 function query(sql,values){
    return new Promise(function(resolve,reject){	//new,新建一个类
        let connection = mysql.createConnection({host:'localhost',user:'root',password:'root',port:'3306',database:'situation'})
        connection.connect();
        //占位符的预编译sql,能大大减少sql的注入,60~70%的网站被黑,基本都是 sql注入造成的
        connection.query(sql,values,function(err,result){
             if(err){
                 reject(err);
             }else{
                 resolve(result);
             }
             connection.end();
        });
    });
}
let sql='select * from china where id=?'

async function select(sql,values){
    let result = await query(sql,values)
    console.log(result);
}

select(sql,2);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值