在Node Js中设置承诺

时间:2018-02-05 21:05:22

标签: node.js promise

我在代码中设置承诺时遇到了问题。这就是我现在实施的:

let promise = new Promise(function(resolve, reject){
            ATVStatement();
            let isdone = true;
            if(isdone){
                resolve();
            }else{
                reject();
            }
        }) 
promise.then(CustomMessage()); 

我得到的问题是,我很确定承诺不起作用。如果有人能发现我正在做的错误,我会非常感激。

修改

以下是正在使用的两个函数的代码:

function ATVStatement() {           
        request = new Request("select distinct(\"Product Name\") from SPA_Data_Feeds where \"Strategic Priority\" = 'Accelerate to Value (LD)'", 
            function(err, rowCount, rows) 
                {
                    console.log(rowCount + ' row(s) returned');
                }
            );


         //var result = "";
         var count = 0


             request.on('row', function(columns) {
                columns.forEach(function(column) {
                    console.log("%s\t", column.value);
                    result+= column.value + "\t\n"; //result is a global variable
                    count++;

                 }); 
                 });

        connection.execSql(request);
       }

function CustomMessage(){
       console.log('here')
       var customMessage = new builder.Message(session)
                            .text("### Here is a list of the ATV Compounds:  \n" + "> %s  ", result)
                            .textFormat("markdown")
                            .speak("Here is what I found for \'%s\'.", session.message.text)
                            .textLocale("en-us");
                        session.send(customMessage); }

1 个答案:

答案 0 :(得分:3)

好的,现在我们更好地理解代码了(感谢更新),我们需要修改ATVStatement以返回一个promise并在查询完成后解析它。

我们将上面的代码更改为:

($('form').submit())

你知道,ATVStatement实际上是异步的。