Согласно объяснению для waitthread.js, он просто использует таймер для опроса, ожидая изменения значения некоторой переменной.
Более типичный шаблон проектирования для этого типа проблемы использует обратные вызовы иfunction a
вызовет функцию обратного вызова, когда работа будет завершена, и начнется function b
.Итак, вы передаете функцию в function a
, которая должна быть вызвана, когда function a
завершит свою работу.Более полный шаблон проектирования обычно имеет обратный вызов как для успешного выхода, так и для неудачного выхода и может даже передавать параметры из выхода, но, поскольку я не знаю ваших особенностей, я не пытался смоделировать это здесь.Для многоэтапного процесса это будет выглядеть так.Мы предполагаем, что в качестве функций a, b и c существуют три асинхронные функции, и каждая принимает функцию в качестве аргумента, который будет вызван после завершения асинхронной функции:
function main_function_step1() {
a(main_function_step2);
}
function main_function_step2() {
// execute code here that goes after function a, but before function b
b(main_function_step3);
}
function main_function_step3() {
// execute code here that goes after function b, but before function c
c(main_function_finish);
}
function main_function_finish()
{
// execute whatever code here to finish
}
Более полное решение передало бы объектс обратным вызовом успеха и обратным вызовом сбоя и предоставит по крайней мере параметр для каждой функции, так что результаты или условия ошибки могут быть возвращены.
В этом случае это будет выглядеть так:
function main_function_step1() {
function main_function_a_step1_fail(err)
{
// handle error in step 1
}
var o = {success: main_function_step2, fail: main_function_a_step1_fail};
a(o);
}
function main_function_step2(data) {
// execute code here that goes after function a, but before function b
function main_function_a_step2_fail(err)
{
// handle error in step 2
}
var o = {success: main_function_step3, fail: main_function_a_step2_fail};
b(o);
}
function main_function_step3(data) {
// execute code here that goes after function b, but before function c
function main_function_a_step3_fail(err)
{
// handle error in step 3
}
var o = {success: main_function_finish, fail: main_function_a_step3_fail};
c(o);
}
function main_function_finish(data)
{
// execute whatever code here to finish
}
Это немного грязно для кода, но не требует опроса или глобальных переменных.Если между шагами нет кода для выполнения и логика между ними одинакова, вы можете параметризовать все в структуре данных и выполнить все шаги с помощью одной функции, которая просто выполняет один элемент из структуры данных и передает следующийзначения в качестве обратных вызовов и т. д.