[英]How to refactor this blocking code to non blocking for node.js
我需要將此代碼重構為非阻塞。
我已經編寫了一個簡單的幫助程序代碼,它的作用是根據提供的先前編號生成發票編號。
helper.js
module.exports = {
replaceCharAt: function replaceCharAt(string, index, character){
var string = string.split('');
string[index] = character;
return string.join('');
},
generateInvoiceNumber: function generateInvoiceNumber(invoiceNumber, useIndex){
var invoiceNumber = invoiceNumber.trim();
if(typeof useIndex === 'undefined' || useIndex === -1 ){
useIndex = invoiceNumber.length - 1;
}
var incrementChar = invoiceNumber[useIndex];
if(incrementChar == '9' || incrementChar == 'z' || incrementChar == 'Z'){
if(incrementChar == 9){
invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, '0');
}
else{
invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, 'a');
}
if(useIndex === 0){
return invoiceNumber = '1'+invoiceNumber;
}
return this.generateInvoiceNumber(invoiceNumber, useIndex - 1);
}
else{
var replaceChar = String.fromCharCode(incrementChar.charCodeAt(0) + 1);
invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, replaceChar);
}
return invoiceNumber;
}
};
我如何在請求處理程序中使用它。
var helper = require('./helper');
var handler = function(request, reply){
var newNumber = helper.generateInvoiceNumber(request.params.oldNumber);
reply({newNumber: newNumber});
}
因此,此代碼將阻塞,直到生成發票編號。 我需要一些技巧和提示,以了解如何重構此功能以使其不受阻礙。
由於您的代碼本質上都是同步的,例如:您沒有進行任何IO調用,因此您無法使該代碼異步:(
異步代碼必須正在進行IO調用,如下所示:
這些事情都可以異步進行,因為您的程序只是在等待其他硬件來做某事:處理結果,發送響應等。
在您的代碼中,您只是在執行一些CPU操作:if語句,字符串比較等。這些東西始終必須直接由CPU處理,既然如此,您就無法“等待”完成”,可以這么說。
如果您確實打算進行異步處理,則可以執行以下操作:
然而,事實是,由於代碼幾乎是最小同步的,因此您不需要執行上述操作。 所有項目中都有一些同步代碼-沒有轉義=)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.