我遇到了一些处理nodejs
异步性质的问题。我正在使用nodejs-mysql
连接器来获取数据。实质上,下面的代码正在执行一个查询来获取file_url
并将信息发送到myApi。第二个查询应该在从api(inputId
)返回的结果更新数据库后立即运行。但是,之前的工作并不是以异步的方式进行的(连接在处理所有内容之前关闭)。使用async
模块执行以下操作的最佳方法是什么?管理异步并在节点中执行多个MySQL查询
var mysql = require("mysql");
var async = require("async");
var Q = require('q'),
myApi = require('myApi')('xxxxx');
//DB
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "root",
database: "test"
});
//1ST Query - Fetch Urls, then upload file to api
con.query('SELECT file_url, file_id FROM myfiles', function(err, rows) {
if (err) throw err;
for (var i = 0; i < rows.length; i++) {
// File URL for upload
var fileUrl = rows[i].file_url,
createInputPromise, createEncodingProfilePromise;
var fileId = rows[i].file_id;
// Create myApi Input
createInputPromise = myApi.input.create(fileUrl);
//WHERE THE ACTION OCCURS!
Q.all([createInputPromise, createEncodingProfilePromise]).then(
function(result) {
console.log('Successfully uploaded file: ' + result[0].url + ' inputId: ' + result[0].inputId);
//2ND Query - Save the inputId return by api for each file
con.query(
'UPDATE myfiles SET myApi_input_id = ? WHERE file_id = ?', [result[0].inputId, fileId],
function(err, result) {
if (err) throw err;
console.log('Changed ' + result.changedRows + ' rows');
}
);
},
function(error) {
console.log('Error while uploading file to api:', error);
}
);
};
});
con.end(function(err) {});