2016-09-08 10 views
1

私は非常に基本的なシナリオを持っています。私はNodeJSアプリケーションでMySQLへの作成操作呼び出しを作成しています。作成操作(成功または失敗)の結果が得られたら、私はいくつかのコードを実行する必要があります。NodeJS:MySQLへの作成操作が完了するまでコード実行を停止する方法

しかし、結果に依存するNodeJSのコードの非同期動作のために、MySQLの作成操作が結果を返す前に実行されています。ここで

は私のコードは私が正しくあなたの質問を理解していれば、私は知らない

  1. calculation.js

    var mysql = require("mysql"); 
    var methods = {}; 
    
    // Creating connection 
    methods.executeQuery = function(selectQuery, values){ 
    
    var result; 
    
    var con = mysql.createConnection({ 
        host: "localhost", 
        user: "root", 
        password: "*********", 
        database: "******" 
    }); 
    
    // getting connection 
    con.connect(function(err){ 
        if(err){ 
         console.log('Error connecting to Db'); 
         return; 
        } 
        console.log('Connection established'); 
    }); 
    
    con.query(selectQuery, values, function(err,rows){ 
        if(err) throw err; 
        console.log(rows); 
        result = rows; 
        console.log(result); 
        return result; 
    }); 
    
    } 
    
    module.exports = methods; 
    
  2. client.js

    var execute = require("./calculate.js"); 
    
    var selectQuery = 'INSERT INTO users (username,password) VALUES (?,?)'; 
    var values = ['sohamsoham12','sohamsoham12']; 
    
    var insertedRowInfo = execute.executeQuery(selectQuery, values); 
    
    if(insertedRowInfo){ 
        console.log("true"); 
    }else{ 
        console.log("false"); 
    } 
    

答えて

0

です( "create operation"とは何ですか? e?)。しかし...
あなたはこのソリューションを試すことができます:接続成功コールバック内のクエリを実行します。

// getting connection and executing query 
con.connect(function(err){ 
    if(err){ 
     console.log('Error connecting to Db'); 
     return; 
    } 
    console.log('Connection established'); 

    con.query(selectQuery, values, function(err,rows){ 
     if(err) throw err; 
     console.log(rows); 
     result = rows; 
     console.log(result); 
     return result; // this can't work... you should invoke a callback function, here... 
    }); 
}); 

UPDATE: はOPのコメントの後、私は今、完全に質問を理解して...(申し訳ありません: - あなただけのあなたは、単に

function(selectQuery, values) { 
    ... 
} 
から methods.executeQueryを変更する必要があります:-)

...非同期動作のビットを欠場()。
その後

function(selectQuery, values, callback) { 
    ... 
} 

から

、代わりに0を呼び出すときは、単に、client.jsで、その後

callback(err, result); // if any error occurred 

または

callback(null, result); // if no error occurred 

を使用する必要があります

return result; 

を使用して、代わりに

var insertedRowInfo = execute.executeQuery(selectQuery, values); 

の方法は、あなたは、単に私が実行= `VARのinsertedRowInfo呼び出すときにすべての私のコードは正常に動作しますがclient.js``にされ、質問は非常に簡単です

execute.executeQuery(selectQuery, values, function(err, insertedRowInfo) { 
    if (err) { 
    // handle error 
    } else { 
    // handle success, using insertedRowInfo... 
    } 
}); 
+0

を行う必要があります。 executeQuery(selectQuery、values); '上記の文の後にコードが必要になり、結果が戻ってくるまで結果が来ます。成功すればtrueを返します。else false。しかし、今は待っていないので、いつもブロックされているのです。 –

+0

O.k.、申し訳ありません...あなたの質問を完全に理解しました。私の更新された答えを見てください... – MarcoS

関連する問題