#javascript #node.js #promise
#javascript #node.js #обещание
Вопрос:
То, что я пытаюсь сделать, в основном
function test() {
getSomeValue().then(function (data) {
//process data
});
}
function getSomeValue() {
//do some long process
return new Promise(function (resolve, reject) {
resolve(result);
});
}
function getSomeOtherValue() {
//do some long process
return new Promise(function (resolve, reject) {
resolve(result);
});
}
Функциональный тест вызывает функцию, которая возвращает обещание, а затем выполняет некоторые вычисления над возвращенными данными. Эта часть работает нормально. Теперь функции getSomeValue
необходимо вызвать другую функцию, которая также возвращает обещание. Как мне вернуть обещание, getSomeValue
которое также ожидает getSomeOtherValue
завершения.
Дайте мне знать, если потребуется какая-либо другая информация.
Комментарии:
1. Вы можете выполнить цепочку,
.then().then()....
Ответ №1:
чтобы получить значение из getSomeOtherValue перед getSomeValue, просто сначала вызовите функцию getSomeOtherValue , затем соединитесь с другой функцией для обработки значения для getSomeValue, затем, наконец, верните результат вызывающему (тестовая функция)
function getSomeValue() {
//do some long process
return getSomeOtherValue().then(function(resultFromSomeOtherValue) {
return new Promise(function (resolve, reject) {
var result = true; //some value after process;
return resolve(result);
});
});
}
Комментарии:
1. добавлено объяснение
Ответ №2:
Вы можете просто связать getSomeOtherValue
внутри getSomeValue
:
function getSomeValue() {
//do some long process
return new Promise(function (resolve, reject) {
resolve(result);
}).then(getSomeOtherValue);
}
Если вы хотите, чтобы порядок был изменен, тогда:
function getSomeValue() {
//do some long process
return getSomeOtherValue().then(function () {
return new Promise(function (resolve, reject) {
resolve(result);
});
}
}
Однако это только для иллюстрации. Вы можете разработать свои обещания так, чтобы вы могли эффективно связывать их на более высоком уровне:
function test() {
getSomeOtherValue()
.then(getSomeValue)
.then(function (data) {
//process data
});
}
Комментарии:
1. на самом деле getSomeOtherValue() должен быть вызван раньше. Мне нужны данные из getSomeOtherValue(), а затем сгенерировать ответ на основе этого
Ответ №3:
Чтобы дождаться getSomeOtherValue
разрешения функции, вам необходимо разрешить обещание getSomeValue
функции в возвращаемом обещании из getSomeOtherValue
функции. Надеюсь, приведенный ниже код должен иметь смысл
function test() {
getSomeValue().then(function (data) {
//process data
});
}
function getSomeValue() {
//do some long process
return new Promise(function (resolve, reject) {
getSomeOtherValue().then(function (data) {
resolve(result);
});
});
}
function getSomeOtherValue() {
//do some long process
return new Promise(function (resolve, reject) {
resolve(result);
});
}