Я подхожу к этому вопросу с точки зрения минимального понимания предмета и пытаюсь понять и понять, что происходит.
Я прочитал статью на Как я могу вернуть ответ от асинхронного вызова? , но я не могу понять это.
Однако, исходя из моего прочтения, может показаться, что раздел, озаглавленный " Если вы не используете jQuery в своем коде, этот ответ для вас " - это раздел, который касаетсяструктура, которую я использую.Однако, поскольку материал, на который есть ссылки в примере, сильно отличается от моего, я просто не могу следовать или понять его настолько, чтобы иметь возможность эффективно применять его в своем коде.
Я также прочитал много других статей о возврате значений из цепочек обещаний, но я не могу полностью следовать или понимать их либо из-за моего статуса на уровне до начала обучения с точки зрения асинхронного javascript и обещаний.
Я надеюсь, что кто-то сможет объяснить самыми простыми способами и помочь мне понять, как применять материал в разделе, озаглавленном " Если вы не используете jQuery в своем коде, этот ответ для вас "из Как вернуть ответ от асинхронного вызова? в мой код.
У меня есть функция, и внутри функции есть асинхронный фрагмент JavaScript.
Я обновил свой код до этого:
function LF(action, key, value){
var ectcb = localforage.createInstance({name: "ectcb"});
return ectcb.defineDriver(window.cordovaSQLiteDriver).then(function() {
return ectcb.setDriver([
window.cordovaSQLiteDriver._driver,
ectcb.INDEXEDDB,
ectcb.WEBSQL,
ectcb.LOCALSTORAGE
]);
}).then(function() {
if (ectcb.driver().toString() = 'cordovaSQLiteDriver'){
if (action = 'save'){ectcb.setItem(key, value); return true;}
else if (action = 'load'){ectcb.getItem(key, value); return true;}
else {return false;}
}
else {return false;}
}).catch(function(err) {
return false;
});
};
Первоначально код был прямо ниже
function LF(action, key, value) {
var ectcb = localforage.createInstance({
name: "ectcb"
});
var thePromiseResult = ectcb.defineDriver(window.cordovaSQLiteDriver).then(function() {
return ectcb.setDriver([
window.cordovaSQLiteDriver._driver,
ectcb.INDEXEDDB,
ectcb.WEBSQL,
ectcb.LOCALSTORAGE
]);
}).then(function() {
if (ectcb.driver().toString() = 'cordovaSQLiteDriver') {
if (action = 'save') {
return ectcb.setItem(key, value);
} else if (action = 'load') {
return ectcb.getItem(key, value);
} else {
thePromiseResult = 1;
}
} else {
thePromiseResult = 1;
}
}).catch(function(err) {});
if (thePromiseResult = 1) {
return false;
} else {
return true;
}
};
У меня есть переменная с именем thePromiseResult, установленная в асинхронный код.
Я пытаюсь понять, как я могу задать конкретное значение для thePromiseResultна основе логики if / else, показанной в коде.
В конечном счете, что-то будет вызывать LF ('save', 'thekey', 'value') , и мне нужно вернуть этому "чему-то" значение true или false.
Я надеюсь, что кто-то сможет объяснить, как я могу изменить этот код, чтобы добиться того, что мне нужно сделать, и объяснить это очень простым для чайников способом, чтобы я мог по-настоящему понять, что происходит.
Я думаю, что установка «thePromiseResult = 1» внутри .then, вероятно, не устанавливает его глобально, а просто устанавливает внутри .then желаемое значение.
Я попытался посмотреть другие посты на эту тему, и я не могу понять концепции, используя различные примеры, которые они показывают.
Моя цель - разместить на другой странице код с надписью
var result = LF('fake','myKey','myValue')
if (result = false){alert("Operation Failed");
else if (result = true){alert("Operation Successful");
Я пытаюсь разбить код так, чтобы он отражал то, что делается в 2.Перестройте код , где говорится, что ваша функция может принять обратный вызов.Однако, поскольку код, используемый в этом примере, сильно отличается от того, что у меня есть, я просто недостаточно осведомлен, чтобы следовать описанному.
Я надеюсь, что кто-то может использовать подход кодера для детского сада, чтобы помочь мне перевести понятия, чтобы было более понятно, как их можно применить к моему коду.