1. 程式人生 > >釋出一個我自己寫的NodeJS非同步轉同步模組

釋出一個我自己寫的NodeJS非同步轉同步模組

眾所周知NodeJS回撥陷阱是個大問題,網上現在也有一些解決方案。

我不喜歡用q或者async這類的模組,我不想為了解決一個非同步陷阱,再去額外學習新的概念,還要再用新的思維編碼,我覺得這是為了解決問題引入更復雜的問題,所以我偏愛fibers型別的纖程解決方案。但是fibers用起來還是不太直觀,根據另外一個封裝模組,按照我自己的使用習慣也封裝了一下,用 npm install simplesync 來安裝。程式碼例子如下:

//首先引入模組,var sync =require('simplesync');//任何同步呼叫都必須位於一個sync.block塊內, sync.block描述可以巢狀。
sync.block(function(){//標準非同步呼叫方式Some_Async_Function(123,function(ta){//這裡引數ta的值是124});//這是同步呼叫方式, result.ta就是124var result = sync.wait(Some_Async_Function(123, sync.cb("ta")));//多個引數就這麼辦functionAsync_Function2(input, callback){ callback(input,456);}//這裡result.ta就是123, result.ta2就是456了 result = sync
.wait(Async_Function2(123, sync.cb("ta","ta2")));}//非同步呼叫函式可以在sync.block內,也可以不在,無所謂。functionSome_Async_Function(input, callback){ callback(input+1);}

一共就三個函式,sync.block定義需要使用同步方式的程式碼塊,sync.wait等待非同步函式完成,sync.cb模擬任義引數的回撥(用來傳給非同步函式,當回撥引數)這樣很直觀,可以把任何以往已經使用過的非同步函式轉換成同步函式,無任何限制。而且sync.cb回撥函式中的引數,可以直接在sync.wait函式返回的結果中使用,我自己覺得把非同步完美的轉換成了同步。

相關推薦

釋出一個自己NodeJS非同步同步模組

眾所周知NodeJS回撥陷阱是個大問題,網上現在也有一些解決方案。 我不喜歡用q或者async這類的模組,我不想為了解決一個非同步陷阱,再去額外學習新的概念,還要再用新的思維編碼,我覺得這是為了解決問題引入更復雜的問題,所以我偏愛fibers型別的纖程解決方案。但是fi

一個自己的矩陣快速冪模板

/* n階方形矩陣快速冪模板,如果m*n的矩陣可以考慮將m,n存入結構體matrix中 函式分為3個,分別是矩陣相乘,轉化單位矩陣,快速冪。 測試結果 AC BY SHU_ON

微信小程式radio不能改變大小?那自己一個

小程式自帶的radio似乎是不能調整大小的,在專案中使用時很不方便,時常會影響整個介面的效果。為了解決這個問題,我使用text標籤結合icon標籤實現了radio效果。 這裡我們實現一個選擇地區的單選框 1.使用radio的效果 可以清楚的看出來圓圈的

程式設計師:為什麼幾個月後自己的程式碼也看不懂了?

寫在開始的"註釋很重要","註釋很重要","註釋很重要",重要的事情說三遍。 程式設計師們大多都會有過這樣的經歷,就是要看別人寫的程式碼。比如說公司有同事離職了,他的業務就需要有其它的小夥伴們給接下來繼續維護。這對好多程式設計師來說是一種折磨,邊看邊罵,這寫的是什麼東西呀。相信好多人都有這種經歷

1017 Queueing at Bank (自己的模擬時間的版本)

Suppose a bank has K windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the custom

60個加速包都搶不到一張票!真垃圾,還不如自己的搶票神器!

7   而加速包的獲取方式有兩種:1 直接花錢買,1 元 1 個價格,全套下來大概 50 元左右。2 是好友助力,每邀請一個好友幫你助力就能獲取 2 ~ 5 不等的加速包。 大部分人都是不願意花錢買加速的,所以你開始群發好友,轟炸微信群,朋友圈吆喝,掛 N 個搶票軟體,各

mysql——自己的兩張表(插入、刪除、更新)同時進行的(觸發器)例項

資料庫如下: <span style="font-size:18px;">create database mytest; use mytest; DROP TABLE IF EXISTS `user1`; CREATE TABLE `user1` ( `i

自己非同步多執行緒佇列

使用 synchronized版本 public abstract class MessageQueue2<T> { private LinkedList<T> queue = new LinkedList<T&g

自己的文字網頁格式的DLL(附原始碼)

程式的總體說明: 這個程式源於自己喜歡諾機裡的ActiveNote程式,所以用C++寫了個程式,用於轉換電腦裡的文字檔案為HTML格式的檔案,然後導到手機裡閱讀。該版本是一個精簡版本,做成了DLL更通用。 DLL介面提供了兩個函式,第一個函式,Txt2Html,是轉換的主函

小遊戲,對於剛剛學完python基礎的非常合適,下一個自己的程式碼

************************歡迎來到遊戲世界*************************                        1.註冊                        2.登入                        3

js 非同步同步之Promise

原文連結:點選開啟連結 深入解析Javascript非同步程式設計 這裡深入探討下Javascript的非同步程式設計技術。(P.S. 本文較長,請準備好瓜子可樂 :D) 一. Javascript非同步程式設計簡介 至少在語言級別上,Javascript是單執行緒

Node.js模擬發起http請求從非同步同步的5種方法

使用Node.js模擬發起http請求很常用的,但是由於Node模組(原生和第三方庫)提供裡面的方法都是非同步,對於很多場景下應用很麻煩,不如同步來的方便。下面總結了幾個常見的庫API從非同步轉同步的幾種方法。模組有:request, request-promis

使用Redis來處理負載均衡場景下非同步同步的方法

使用Redis來處理負載均衡場景下非同步轉同步的一種方法 背景 對一個由Java編寫的提供HTTP介面服務的程式進行改造以支援負載均衡,特別是提高整個系統的可用性。該服務有一個HTTP介面,收到請求後,內部會去非同步請求第三方,第三方通過HTTP回撥把結果返回,

ROS的初步學習(五)--自己一個簡單的釋出(Publisher)、訂閱(Subscriber)程式

1 寫一個釋出(Publisher)節點 節點(node)是連線到ROS網路中可執行的基本單元。我們在這建立一個釋出者—“talker”節點,這個節點持續對外發布訊息。 首先我們要把目錄切換到我們的beginner_tutorials工程包中 $ cd ~

自己一個文字過長顯示省略號的函數

bsp aaa poi var cti 顯示 adf 函數 字符 function points(strin,num){ //strin表示目標字符,num表示在第幾個字符用省略號顯示   var Str = "",len = strin.length;   if(len

oracle 10G 沒有 PIVOT 函數怎麽辦,自己一個不久有了

name 行轉列 動態sql self. subst ger esc 10g 必須 眾所周知,靜態SQL的輸出結構必須也是靜態的。對於經典的行轉列問題,如果行數不定導致輸出的列數不定,標準的答案就是使用動態SQL, 到11G裏面則有XML結果的PIVOT。 但是 orac

C#.NET 程序員的福利,自己一個XML操作類,可實現像jquery一樣方便的xml操作,且不用專門去處理命名空間。

console region ignorecas node 處理 命名空間 void clone 一個 此工具是進入一家新公司之後實現的,主要是工作當中操作 xml 的時間太多,因為公司按任務計“工作量”,領導給我安排的時間遠遠不夠完善此工具【悲哀的

一位從vb系到JAVA的朋友在一個類中一個類似VB中MSGBOX的方法

fin return gen interface man text string listener com //此方法放一個自定義的JAVA類中 public static boolean msgBoxPlus(Activity objPage, String strTi

自己的dijkstra算法的一個實現。

dijkstra 算法 之前在網上面看到這個算法還有提到如果使用堆的話會減低時間復雜度。然後就在想如果使用堆的話代碼應該如何實現。然後嘗試自己寫一個出來進行測試。測試了一副圖沒有問題。寫一篇博客記錄一下之前寫的代碼。#define INF 99999999 struct SortNode {

Android Studio 引用自己一個model

找到 gpo bsp mod model nbsp put 目的 body 1. 在以前的項目中,reBuild 項目完後,在具體某一個model下的build—>output—>aar下找到對應的AAR文件,用後綴名為release的aar。 2.把aar文件