我需要将此代码重构为非阻塞。
我写了一个简单的帮助代码,它的作用是根据提供的前一个数字生成发票编号。
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});
}
因此,此代码会阻止,直到它生成发票编号。我需要一些提示和提示,如何重构这个不阻止。
答案 0 :(得分:0)
由于您的代码本质上是同步的,例如:您没有进行任何IO调用,因此您无法使此代码异步:(
异步代码必须进行IO调用,如下所示:
这些东西都可以异步,因为你的程序只是在等待其他一些硬件做某事:处理结果,发送响应等。
在你的代码中,你只是简单地执行一些CPU操作:if语句,字符串比较等。这些东西总是必须由你的CPU直接处理,因为那样,那里&# 39;不能让你等到那个完成',可以这么说。
如果您真的想要使此异步,您可以执行以下操作:
然而,事实是,由于您的代码非常简单,因此您不需要执行上述操作。所有项目都有一些同步代码 - 没有逃避它=)