2016-09-29 4 views
2

То, что я пытаюсь сделать, это в основномКак вернуть обещание от функции, которая сама использует обещание?

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.

Сообщите мне, если какая-либо другая информация необходима.

+0

Вы можете сделать цепное, '.then(). затем() ....' – Rayon

ответ

1

Вы можете просто цепь 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 
     }); 
} 
+0

фактически getSomeOtherValue() должен быть вызван прежде. Мне нужны данные из getSomeOtherValue(), а затем генерировать ответ на основе этого –

1

Ждать функции 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); 
}); 
} 
2

, чтобы получить значение из 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); 
    }); 
    }); 
} 
+0

добавленных объяснений – alpha