var Jscex = require("jscex");
require("jscex-jit").init(Jscex);
require("jscex-async").init(Jscex);
require("jscex-async-powerpack").init(Jscex);
var Jscexify = Jscex.Async.Jscexify;
var Client = require('mysql').Client;
client.queryAsync = Jscexify.fromStandard(client.query);
function BaseModel(){
table = "t_user";
var tableMsg = getTableConfigFromJson(table);
this._table = table;
this._key = tableMsg['key'];
this._tableConfig = tableMsg['value'];
this.add = eval(Jscex.compile("async",function(jsonValue){
var addMsg = changeJsonToString(jsonValue);
var sql = 'INSERT INTO ' + tableName + "(" + addMsg["key"] +") values(" + addMsg["value"] +")";
//client.queryAsync = Jscexify.fromStandard(client.query);
var result = $await(client.queryAsync(sql));
console.log(result.insertId);
return result.insertId;
console.log("1");
return "22";
}));
希望使用jscex来同步数据库执行操作,但是一直返回一个这个信息
{ id: 1, _delegate: [Function], _listeners: {}, status: ‘ready’ }
1 回复
1、这个返回的是一个task对象,需要调用其start()方法才开始执行的
this.add = eval(Jscex.compile("async",function(jsonValue){
2、在上面的函数体里面可以像阻塞方式来写程序,但其实际上还是异步执行的,因此this.add()必须通过回调函数来返回数据,比如:
// 这个是task对象 $await语句必须在这里面才能生效
this.addAsync = eval(Jscex.compile("async",function(jsonValue, callback){
// 执行多个插入数据库操作
var result1 = $await(client.queryAsync('SQL语句'));
var result2 = $await(client.queryAsync('SQL语句'));
var result3 = $await(client.queryAsync('SQL语句'));
// 回调函数返回
callback(result1, result2, result3);
}));
// 这个是用于一般调用方式的接口
this.add = function (jsonValue, callback) {
// task对象需要执行start()来运行
this.addAsync(jsonValue, callback).start();
}
3、你应该从头拜读老赵写的Jscex系列文章
不知道这样解释是否正确,求@老赵 直到