Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 调用存储过程后何时返回resolve()_Node.js_Tedious - Fatal编程技术网

Node.js 调用存储过程后何时返回resolve()

Node.js 调用存储过程后何时返回resolve(),node.js,tedious,Node.js,Tedious,我在节点Js上使用了冗长的代码。 我的代码正在从存储过程获取输出参数 我想知道我什么时候能在成功的情况下恢复决心 function doInsertDansok(dansokFormBody) { return new Promise((resolve, reject) => { connection.on('connect', (err)=> { if (err) { log.error('connection error:', err);

我在节点Js上使用了冗长的代码。 我的代码正在从存储过程获取输出参数

我想知道我什么时候能在成功的情况下恢复决心

function doInsertDansok(dansokFormBody) {
  return new Promise((resolve, reject) => {
    connection.on('connect', (err)=> {
      if (err) {
        log.error('connection error:', err);
        reject(consts.JSON_REJECT_500_SQL_ERROR);
        return;
      } 

      let output = {o_retKey:null, o_errMsg:null, o_retReceiptInfo:null};
      let request = new Request(
        'SP_TEST_OUTPUT_PARAM 1, @o_retKey OUT, @o_errMsg OUT, @o_retReceiptInfo OUT', 
        (err, rowCount, rows)=> {
          if (err) {
            log.error('request error:', err);
            reject(consts.JSON_REJECT_500_SQL_ERROR);
          } else {
            log.info(rowCount + " rows(s) returned.", rows);
            resolve(output); //<== Is this point correct?
          }
      });
      request.addOutputParameter('o_retKey', TYPES.Int);
      request.addOutputParameter('o_errMsg', TYPES.VarChar, {length:100});
      request.addOutputParameter('o_retReceiptInfo', TYPES.VarChar, {length:255});
      request.on('returnValue', (parameterName, value) => {
        log.info('request on returnValue: ' + parameterName + ' = ' + value);  
        output[parameterName] = value; // <-- it called 3 times.  so I choose to collecting parameter in here.  Is it correct way?
      });
      request.on('doneProc', () => {
        log.info('request doneProc', output);
        //resolve(output);  //<== Actually I thought this point is the right position to return resolve().  But from log, it was wrong.
      });
      connection.execSql(request);
    });
  });
}

按照下面的方式操作,requestCompleted是您需要将resolve值放入的地方。得到3倍returnValue的原因是因为您有3个outputparameters,并且它在上面的代码中是正确的

request.on('requestCompleted',()=>{
connection.close();
done(null,result);//result是您想要返回的值
});

我觉得您应该在
新请求中解决(
callback.你这样做有没有出错?@NanduKalidindi我输入了无效的句子。我修改了我的问题。你使用的是什么数据库?你能为数据库提供一个指向文档的链接吗?我们需要了解它的接口如何工作的详细信息,以便知道可以提供的最佳建议。是这样的:?@jfriend00我使用的是SQL Server 2012 edi你的链接是我的参考。
[2017-12-12T15:21:26.929] [INFO] dansokInsertController - request on returnValue: o_retKey = 2
[2017-12-12T15:21:26.943] [INFO] dansokInsertController - request on returnValue: o_errMsg = Twice
[2017-12-12T15:21:26.943] [INFO] dansokInsertController - request on returnValue: o_retReceiptInfo = sana momomo
[2017-12-12T15:21:26.943] [INFO] dansokInsertController - request doneProc { o_retKey: 2,
  o_errMsg: 'Twice',
  o_retReceiptInfo: 'sana momomo' }
[2017-12-12T15:21:26.944] [INFO] dansokInsertController - 3 rows(s) returned. []