My apologies. It was Aaron who referred to "callback hell" :)
Put in a simple example, with node you have to delegate certain functionality to callbacks. One example would be accessing a record in a table like this:
MyTable.findOne("key").exec(function(err,myRecord){
if (!err) {
// Do stuff with myRecord
return res.ok() // Return response to the client
}
})
Let's say, for the sake of illustration, that after I get myRecord, I want to also then get a record from MyTable2 before returning a response to the client:
MyTable.findOne("key").exec(function(err,myRecord){
If (!err) {
// Do stuff with myRecord
MyTable2.findOne(myRecord.foreignKey).exec(function(err,myRecord2){
If (!err) {
// Do stuff with myRecord2
return res.ok() // Return response to the client
}
})
}
})
So the more I want to do, the more nested becomes the thing I ultimately want to do - which is "return res.ok()" It can get pretty horrible, and the pyramid of doom is the nesting (a pyramid laid on its side).
With promises, the code is simplified
MyTable.findOne("key")
.then(function(myRecord){
// Do stuff with myRecord
return MyTable2.findOne(myRecord.foreignKey);
})
.then(function(myRecord2){
// Do stuff with myRecord2
Return res.ok()
})
.catch(function(err){
})
.finally(function(){
})
That is the gist, although there is more to it (like building up parameters and using .spread() etc).
The code runs in an asynchronous way, so the second .then() only executes when the first .then() has done its thing, but it is more pleasing on the eye. I wouldn't say it is mind-blowingly intuitive, but once you get the hang of it, it is a great relief!
-----Original Message-----
From: WEB400 [mailto:web400-bounces@xxxxxxxxxxxx] On Behalf Of Nathan Andelin
Sent: 23 October 2015 17:40
To: Web Enabling the IBM i (AS/400 and iSeries) <web400@xxxxxxxxxxxx>
Subject: Re: [WEB400] Node and callback hell
Kevin,
Yes, we may be talking about different things. I don't believe I ever used the term "callback hell", though I have read references to it. Just so that we're on the same page, could you describe the problem?
I can imagine problems occurring when "registering" call-backs from say "nested" routines if you don't implement some mechanism such as a "queue"
to ensure that the I/O and call-back are performed synchronously.
Subsequent I/O requests may depend on an initial request completing successfully.
I followed your GitHub link. But I always have a hard time looking at source-code projects without adequate background or explanation of the project. References to GitHub typically come across as uber-geeky. Like, Hello Visitor Dude... don't you just get it?
I don't really understand "promises". So, no I would neither reject nor endorse it until I understand it.
--
This is the Web Enabling the IBM i (AS/400 and iSeries) (WEB400) mailing list To post a message email: WEB400@xxxxxxxxxxxx<mailto:WEB400@xxxxxxxxxxxx> To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/web400
or email: WEB400-request@xxxxxxxxxxxx<mailto:WEB400-request@xxxxxxxxxxxx>
Before posting, please take a moment to review the archives at
http://archive.midrange.com/web400.
___________________________________________
This email has been scanned by iomartcloud.
http://www.iomartcloud.com/
________________________________
NOTICE: The information in this electronic mail transmission is intended by CoralTree Systems Ltd for the use of the named individuals or entity to which it is directed and may contain information that is privileged or otherwise confidential. If you have received this electronic mail transmission in error, please delete it from your system without copying or forwarding it, and notify the sender of the error by reply email or by telephone, so that the sender's address records can be corrected.
--------------------------------------------------------------------------------
CoralTree Systems Limited
25 Barnes Wallis Road
Segensworth East, Fareham
PO15 5TT
Company Registration Number 5021022.
Registered Office:
12-14 Carlton Place
Southampton, UK
SO15 2EA
VAT Registration Number 834 1020 74.
As an Amazon Associate we earn from qualifying purchases.