我如何在节点 js 中实现这种模式?
How do i implement this pattern in node js?
我正在编写一个数据访问层,我的 dalmethod 将在其中调用,在调用者完成工作后,我必须关闭数据库。
我不想打扰调用者关闭我的数据库(或执行其他一些操作)。
基本上我在我的异步操作中寻找一些同步性(承诺?)。
以下为伪代码
//For simplicity , assume they are in same file.
function Caller ()
{
dalmethod(function(err,db){
do some thing
// I am done here
});
}
function dalmethod(callback)
{
// Connect database & call this function
callback(somevalue,db);
//after call back function is executed call some more methods. such as closing the db.
// db.close();
}
Caller();
你是对的,这是一个有希望的经典:
function Caller() {
dalmethod( function(err, db) {
// Let promisification of anonymous callback
return new Promise(( resolve, reject ) => {
console.log('do somethings');
// Simulate processing errors
var dice = Math.random();
if (dice>0.5) {
resolve( 'Some result' );
} else {
reject( new Error('Something went wrong') );
}
});
});
}
function dalmethod(callback) {
var somevalue, db;
callback(somevalue,db)
.then(
response => { console.log( response, 'close db' ); },
reject => { console.log(reject); }
);
}
Caller();
我正在编写一个数据访问层,我的 dalmethod 将在其中调用,在调用者完成工作后,我必须关闭数据库。
我不想打扰调用者关闭我的数据库(或执行其他一些操作)。
基本上我在我的异步操作中寻找一些同步性(承诺?)。
以下为伪代码
//For simplicity , assume they are in same file.
function Caller ()
{
dalmethod(function(err,db){
do some thing
// I am done here
});
}
function dalmethod(callback)
{
// Connect database & call this function
callback(somevalue,db);
//after call back function is executed call some more methods. such as closing the db.
// db.close();
}
Caller();
你是对的,这是一个有希望的经典:
function Caller() {
dalmethod( function(err, db) {
// Let promisification of anonymous callback
return new Promise(( resolve, reject ) => {
console.log('do somethings');
// Simulate processing errors
var dice = Math.random();
if (dice>0.5) {
resolve( 'Some result' );
} else {
reject( new Error('Something went wrong') );
}
});
});
}
function dalmethod(callback) {
var somevalue, db;
callback(somevalue,db)
.then(
response => { console.log( response, 'close db' ); },
reject => { console.log(reject); }
);
}
Caller();