我一直在JavaScript代碼中回調地獄,我相信這是由我以前的經驗主要是純同步/線程Java代碼。實際的代碼示例應該如何構造以避免回調地獄?
我學習的榜樣很好,但有,作爲然而,一直無法「前後」的例子回調地獄的很多,我發現它出現在的情況下解決了找好。
我將不勝感激如果某種靈魂可以告訴我下面提供的代碼應該是什麼樣的結構,以避免回調地獄(如果需要,可以使用異步庫等庫),因爲我相信一個實際的例子會讓我和其他人閱讀這個問題。
用這一段時間,我仍然無法找到一種工作方式,它將允許在原始回調中調用以及保留代碼的邏輯。
任何幫助,如果很好的讚賞,謝謝你的時間。 :)
代碼: var fs = require('fs'); var zlib = require('zlib');
var defaultOptions = require('./options/defaults');
function FeatherDB (sourcePath, options)
{
if (options === undefined)
{
// use defaults if options not provided
options = defaultOptions;
}
else
{
// ensure all keys are supplied
for (key in defaultOptions)
{
if (options[key] === undefined)
{
options[key] = defaultOptions[key];
}
}
}
this.sourcePath = sourcePath;
this.options = options;
}
FeatherDB.prototype.load = function (callback)
{
var thiz = this;
fs.exists(this.sourcePath, function (error, doesExist) {
if (error)
{
callback(error);
return;
}
if (doesExist)
{
fs.readFile(thiz.sourcePath, function (error, rawFileData) {
if (error)
{
callback(error);
return;
}
if (thiz.options.compress)
{
zlib.gunzip(rawFileData, function (error, rawUncompressedData) {
if (error)
{
callback(error);
return;
}
try
{
thiz.documents = JSON.parse(rawUncompressedData.toString('utf8'));
}
catch (error)
{
callback(error);
return;
}
callback(null);
})
}
else
{
try
{
thiz.documents = JSON.parse(rawFileData.toString('utf8'));
}
catch (error)
{
callback(error);
return;
}
callback(null);
}
})
}
else
{
thiz.documents = {};
callback(null);
}
})
}
你試過wait.for? https://github.com/luciotato/waitfor –