在node.js Javascript中将cps转换为Promise
我在node.js中使用在node.js Javascript中将cps转换为Promise,javascript,node.js,promise,Javascript,Node.js,Promise,我在node.js中使用cps使用以下方法: exports.execute = function (input, callback) { var config = {...}; var conn = mysql.createConnection(config); conn.connect(function (err) { if (null !== err) { var message = { "l
cps
使用以下方法:
exports.execute = function (input, callback) {
var config = {...};
var conn = mysql.createConnection(config);
conn.connect(function (err) {
if (null !== err) {
var message = {
"level": "error",
"message": err
};
console.log(message);
callback(JSON.stringify(message));
}
});
/* cps for async */
cps.seq([
/**
* @function
* @name validate
* @param _
* @param handle
*/
function (ignore, handle) {
if (null !== input.test) {
conn.query(input.test.query, handle);
} else {
handle(null, null);
}
},
/**
* @function
* @name query
* @param res
* @param handle
*/
function (res, handle) {
if ((null === res && null === input.test) || true === input.test.validate(res)) {
if (input.query !== null) {
conn.query(input.query, handle);
} else {
handle(null, null);
return;
}
} else {
var message = {
"level": "error",
"message": input.test.error
};
console.log(message);
callback(JSON.stringify(message));
conn.end();
return;
}
},
function (res, handle) {
console.log("[RDS-BASE] Executing input action");
handle(null, input.action(res));
},
function (res, ignore) {
console.log("[RDS-BASE] Executing response");
if (null === res) {
var message = {
"level": "error",
"message": "Missing result"
};
console.log(message);
callback(JSON.stringify(message));
conn.end();
return;
}
callback(null, res);
conn.end();
return;
}
], handle);
};
如何使用
Promise
或任何其他方法来重构代码,以替换cps
功能。第一步是提示您调用的cps样式的函数,它们是conn.connect
和conn.query
您可以为此使用util.promisify
const { promisify } = require('util');
. . .
conn.connect = promisify(conn.connect);
conn.query = promisify(conn.query);
然后可以使用async/await来简化代码
exports.execute = async function (input) {
. . .
await conn.connect();
let res = await conn.query(input.test.query);
. . .
}
然后,当您想使用execute时,可以使用。然后
/。catch
或将其包装为异步
/等待