我正在尝试根据ibm_db查询的结果替换字符串的某些字符,但我似乎无法返回结果字符串,这里是代码:
编辑:这是完整的代码
`function updateMessage(input, response) {
var responseText = null;
if (!response.output) {
response.output = {};
} else {
// Regex to accept any format of phone numbers
var regex = new RegExp( /3\d{2}(-| )?\d{3}(-| )?\d{4}/);
if( response.context.service != "none" && regex.test( input.input.text ) ){
var phoneNumber = [];
for( var i = 0; i < response.entities.length; i++ ){
if( response.entities[i].entity === 'sys-number' ){
phoneNumber.push( response.entities[i].value );
}
}
// Format the phone number, trim spaces and hypens if any
phoneNumber = phoneNumber.join("");
phoneNumber = phoneNumber.replace(/-/g, "");
var query = "SELECT * FROM PLAN WHERE PHONENUMBER = ";
query = query.concat( phoneNumber );
conn.query( query, function( err, rows ){
if( err ){
console.log( "Error: ", err );
return;
}else{
if( rows === "[]" ){
answer = "NoData";
}else{
var output = response.output.text[0];
response.output.text[0] = output.replace( 'cap', rows[0].CAPACITY );
// return response;
}
}
} );
return response;
}else{
return response;
}
}`
response.output.text [0]是字符串:&#34;你的容量是上限&#34; 并且它不会返回被替换的字符串,任何人都可以为此采取正确的方法吗?谢谢。
答案 0 :(得分:0)
由于nodejs的异步性,很明显你面临这个问题的原因。 请注意,I / O绑定操作非常耗时,导致系统运行缓慢。在nodejs程序中,无论何时调用i / o,它通常都不会保持空闲状态,直到获得io结果,它将尝试执行下一行代码。你应该在db回调方法中返回响应变量。
conn.query( query, function( err, rows ){
if( err ){
console.log( "Error: ", err );
return;
}else{
if( rows === "[]" ){
answer = "NoData";
}else{
var output = response.output.text[0];
response.output.text = output.replace( 'cap', rows[0].CAPACITY);
return response;
}
}
});
有关回调的更多信息,请检查此链接: https://www.tutorialspoint.com/nodejs/nodejs_callbacks_concept.htm