nodejs上的asignment问题

时间:2017-06-27 04:33:31

标签: node.js watson-conversation watson

我正在尝试根据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; 并且它不会返回被替换的字符串,任何人都可以为此采取正确的方法吗?谢谢。

1 个答案:

答案 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