2017-10-25 15 views
0

node.jsスクリプトを書きましたが、期待通りに動作しません。 ここに私のjsコードは、mysqlの接続を記述する。Node.js mysqlクエリが空の配列を返します

var mysql = require('mysql'); 
var createConnectionMYSQL; 
var connectCount=0; 
(createConnectionMYSQL = function() { 
    con = mysql.createPool({ 
     connectionLimit:10, 
     host: "*****", 
     user: "*****", 
     password: "********", 
     database: "dbname" 
}); 
     console.log(++connectCount); 
})(); 
con.query("SET SESSION wait_timeout = 120"); 
con.query('set names utf8'); 
con.on('error', function (err) { 
    if (err.code === 'PROTOCOL_CONNECTION_LOST') { 
     createConnectionMYSQL();       
    } else {          
     throw err;         
    } 
}); 

メイン関数は、私が扱うことを約束します。

function getRecipes(str, page) { 
    return new Promise(function (resolve, reject) { 
     //unimportant code 
     var sql = 'SELECT ID, Recept, MATCH (Recept) AGAINST ("+' + ingredients[0] + '*" IN BOOLEAN MODE) as REL FROM recipes WHERE (MATCH (Recept) AGAINST ("+' + ingredients[0] + '*" IN BOOLEAN MODE))>0 ORDER BY REL'; 
     if (page != 0) sql += ' LIMIT ' + (page * 12) + ' ,12'; 
     con.query(sql, function (err, result, fields) { 
      if (err) return reject(err); 
     // console.log(result + ' ' + sql); 
      resolve(result); 
     }); 
    }); 

} 

しかし、私は奇妙なmysqlモジュールの動作を取得します。 getRecipes(par1,0).then(function(results){})で私は最初に空の配列を取得し、1分後にはresolve()が2回働いたかのように結果が通常の配列になります。しかし、それはラッキーなケースです。時々私は空の配列を持っていて、次に結果が期待される配列を返します。

+0

'解決 'が2回トリガーされたかどうか確認しましたか? –

+0

@RyanWu、私はちょうど確認しました、aneはい、 '解決'は複数回起動...しかし、なぜですか?私は正しいmysqlのクエリを持っています。 –

答えて

0

私は 'return reject(err)'の返信は不要だと思いますが、これはこの動作を説明するものではありません。

クエリを処理する同じ約束ループに接続部分がありますか?だから最初に接続がOKであることを約束して確認した後、あなたはその質問をしますか?そうでなければ、いくつかの問題を引き起こす可能性があります。

データベースから、いくつのリクエストが来ているかチェックしましたか?

関連する問題