Не знаю, как задать этот вопрос, и я действительно борюсь с обещаниями, поэтому я попробую на упрощенном примере.
Скажем, у меня есть функция, которая принимает обратный вызов. В этой функции я хочу сделать асинхронный вызов, который также имеет обратный вызов, поэтому, когда вызывается его обратный вызов, я делаю что-то на основе его ответа, а затем вызываю свой обратный вызов.
someFunction = function(callback) {
var startTime = (+new Date());
someAsyncCall(function() {
var endTime = (+new Date());
callback(startTime, endTime);
});
};
Что делает функцияне имеет значения, так как меня интересует структура и последовательность вещей. Но этот пример просто записывает время до и после выполнения внутреннего асинхронного вызова, а затем вызывает обратный вызов, чтобы сообщить эту информацию.
Теперь, на мой вопрос, допустим, что someAsyncCall был преобразован в Promise, а someFunctionтакже преобразуется, чтобы вернуть это обещание и не принимает обратный вызов. Итак, структурно моя функция теперь будет выглядеть примерно так:
someFunction = function() {
var startTime = (+new Date());
return someAsyncCall();
// How to capture endTime on then before moving on?
};
Проблема в том, что теперь я хочу захватить время окончания после someAsyncCall () и записать эти данные где-то, предположительно на то времяусловие someAsyncCall (), перед тем как вызывается условие someFunction (). Как мне это сделать?
ОБНОВЛЕНИЕ: Мне кажется, я не получаю ответ, который ищу, или просто не могу понять, что у меня в голове, так что, возможно, лучший способсформулируйте мой вопрос следующим образом:
Давайте начнем с этого примера кода:
startProcess = function() {
// Do a bunch of stuff here...
return doProcess(someParams);
}
В конечном счете, doProcess возвращает обещание, которое возвращается startProcess. Затем вызывающая сторона делает с ней все, что делает.
Теперь я хочу обернуть некоторый код в doProcess, чтобы зафиксировать время начала и окончания, без каких-либо помех работе существующего кода. Есть ли какой-нибудь способ, которым я могу ответить на завершение doProcess, чтобы сделать что-то, прежде чем он разрешит обещание, обычно для того, что вызывает startProcess? Дело в том, что эта функция не имеет ни малейшего представления, кто ее вызывает или что делает вызывающая сторона с обещанием;по сути, это просто оболочка для doProcess.