2016-09-20 2 views
1

Я интересно, если кто-то знает хороший способ рефакторинга следующей функции в более посыл-эске функции:JS: Refactor функция мульти-обратный вызов в обещание

function runProcess(processStarted, processFinished) { 
    getProcessId(processStarted) 
    doABunchOfAsyncLogic(processFinished) 
} 

Он вызывается так:

runPromise(function handleStart(){...}, function handleEnd(){...}) 
+2

Это интересный вопрос, но возникает множество вопросов. Структура зависит от того, как эти две функции коррелированы? Является ли первый асинхронным тоже? Второй зависит от результата первого? Если первый асинхронно, идентификатор будет передан вам синхронно после его вызова. Вы хотите использовать его для отмены цепочки обещаний? Вид ... – Redu

+0

Пожалуйста, разместите свой фактический код, чтобы мы могли видеть, что делают ваши обратные вызовы. – Bergi

ответ

4

Это не очень подходящий случай для обещаний, потому что по своей природе вам нужно два обратные вызовы: один для запуска, один для отделки. Но обещания одноразовые: после их урегулирования они не могут быть переустановлены или схожи.

Вы можете сделать это, возвращая массив из двух обещаниях, или объект с отдельными обещаниями «начать» и «финиш»:

function runProcess() { 
    return { 
     start: new Promise(...), 
     finish: new Promise(...) 
    }; 
} 

... но это не является естественным договоренность кейс.

я бы, вероятно, ожидать, что процесс до начала во время вызова функции, и только его конца быть обещанием маньяков.

+1

Спасибо за ответ. Да, как ни странно, это не похоже на большой вариант использования. Я закончил тем, что разрешил обратный вызов 'handleStart', а затем возвратил обещание для основного обратного вызова' processFinished'. – majorBummer

+0

@majorBummer Есть ли всегда * обратный вызов 'handleStart' или он должен быть необязательным? Что нужно делать? – Bergi

Смежные вопросы