之前对于Promise相当不了解,同步等待函数都是用的其他的库,后面发现es原生的Promise其实完全可以支持同步等待操作,以此记录,希望后面人少走弯路。

promise

Promise的参数是一个函数,函数就是要等待执行的什么内容,这个函数的参数有两个,一个是resolve,一个是reject。通过主动调用resolve就可以控制promise的结束。

Promise(funciton(resolve, reject){
    resolve();

async/await

es6有了一个新的关键字 await/async,可以达到编写同步代码的目的。比如等待时间到了执行后面的内容就可以写成

async waitOneSecondToExe(){
    await setTimeout(function(){}, 1000);
    doSomething();

await同步等待的内容是一个Promise对象,当然不是Promise对象await也不会报错,但是也没有任何作用了。

同步等待一个回调函数

await一个函数好理解,但是await一个回调函数怎么办呢。我现在想等待websocket返回结果再执行后面的内容如何做呢?

//socket接收到数据然后执行doSomething
function recvData(){
    socket.on("recvData", function(data){
        console.log(data);
    doSomething();   

如上面的代码肯定是不行的,recvData中的socket.on函数仅仅是进行了注册,我的期待是doSomething在socket接收到数据后才执行,那么怎么办呢?

async function recvData(){
    await new Promise((resolve) => 
            socket.on("recvData", function(data){
                console.log(data);
                resolve();
    doSomething();

通过主动调用resolve函数,会把Promise内部的状态设置为已完成,await等待的Promise就会得到结果,执行下面的程序内容。达到同步等待会调函数的目的

开始学习nodejs,并不懂很多东西的使用,尤其是websocket这个东西。通过网上搜索发现websocket是异步并且没有同步接口。这个就让人很头疼,因为我做的项目需求必须整个流程达到同步效果。经过长时间的查找,居然发现了一个类似于c++里面signal的库,真的是让我欣喜若狂,而且使用很方便,下面介绍一下这个库和使用方法。库路径:https://github.com/akira-... #include <assert.h> #include "Poco/Net/WebSocket.h" #include "Poco/Net/HTTPClientSession.h" #include "Poco/Net/HTTPRequest.h" #include "Poco/Net/HTTPResponse.h" #include "Poco/Net/ServerS...
socket.io-promise 使用承诺的事件扩展 socket.io。 当您需要在指定时间内从 socket.io 客户端回复时非常有用。 指定超时后,套接字将自动解除绑定 'pong' 事件处理程序。 示例 1。 var socketio = require ( 'socket.io' ) , socketiosocket = require ( 'socket.io/lib/socket' ) , promise = require ( 'promise' ) ( socketiosocket ) ; io . sockets . on ( 'connection' , function ( socket ) { socket . giveme ( 'pong' , function ( pongMessage ) { // > { sta
一个客户端库,带有用于浏览器和Node.js的基于的API。 import WebSocketAsPromised from 'websocket-as-promised' ; const wsp = new WebSocketAsPromised ( 'ws://example.com' ) ; await wsp . open ( ) ; wsp . send ( 'message' ) ; await wsp . close ( ) ; 全球Promise构造函数 npm i websocket-as-promised --save 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。   因此,一种新的通信协议应运而生—websocket,他最大的特点就是服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了真正的平等。 websocket其他特点如下: 1. 建立在 TCP 协议之上,服务器端的实现比较容易。 2. 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 H
当业务量上升后,由于mysql对全文检索或模糊查询支持的能力不强,在系统中查询的地方,往往会出现慢sql等,拖累系统其他模块,造成性能低下。 随着ES使用普及率的升高,ES是mysql的一个有效补充。我们可以将数据发送到搜索引擎(如ES)上,由搜索引擎来提供专业的服务。 接下来,就结合工作中实际用到的场景,对数据从mysql到es的同步进行一些分析。 在实践中我总结出了以下几种方式。 第1种:同步双写 这是一种比较简单的方式,就是在将数据写入到MySQL的时候,同时将数据写入到ES,实现数据的双写
1.TCP协议的三次握手与四次挥手 (1)TCP连接建立过程中采用“三次握手机制” 第一次握手:客户端发出连接请求报文段,其中将SYN标志位置为1表示要建立连接,选择一个初始序列号seq=x,不携带数据但消耗一个序号。之后TCP客户进程进入SYN-SENT(同步已发送)状态。 第二次握手:服务器收到连接请求报文段后,如同意建立连接,向客户端发送确认。在确认报文段中将SYN位和ACK位都置1,确认号是ack=x+1,选择一个初始序号seq=y,不携带数据但消耗一个序号。TCP服务器进程进入SYN-RCV 遵循RFC6544协议的通信协议。Webcoket协议和http协议属于并行关系,但是websocket是以http协议为基础开发出来的(微软用IhttpHandler接口中同时处理这两种协议),同时他们都是以TCP协议为基础。可以进行双向通信、持久化通信。Http是单向通信协议、无状态通信。 websocket协议(握手部分): GET /chat HTTP/1.1 Host: http://server.example.com Upgrade: websocket Connection: