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.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.