Как добавить обратный вызов функции в javascript
У меня есть две функции javascript
function one () {
do something long... like writing jpgfile on disk
}
function two () {
do something fast... like show the file
}
Я называю это (в jQuery) следующим образом
one ();
two ();
Поскольку для функции two нужен файл ссылки из одной функции, мне нужно убедиться, что выполнение завершено... поэтому получение функции два в обратном вызове функции должно быть трюком.. но как это сделать?
note: Я поставил предупреждение ('aaa') между этими двумя функциями, чтобы функция была одной полной, и она отлично работала... когда предупреждение отправлено (удалено), ничего не работает!
Ответы
Ответ 1
Вам нужно всего лишь использовать обратный вызов, если вы делаете что-то асинхронное, иначе не имеет значения, сколько времени займет что-то, следующая функция не будет работать до тех пор, пока первая не закончится.
Обратный вызов - это просто передача функции в качестве аргумента, а затем вызов ее по завершении.
function one (callback) {
do something long... like writing jpgfile on disk
callback();
}
function two () {
do something fast... like show the file
}
one(two);
Очевидно, что если вы делаете что-то асинхронное, вам нужно что-то, что скажет вам, когда оно будет завершено (например, при запуске события).
Ответ 2
Простой:
function one (callback) {
do something long... like writing jpgfile on disk
if(callback) callback();
}
function two () {
do something fast... like show the file
}
one(two);
Ответ 3
Попробуйте это,
$.when($.ajax(fuction1())).then(function () {
fuction2;
});
Здесь fuction1 - ваша первая функция для вызова, а fuction2 - ваша вторая функция.
Ответ 4
Мне кажется легким, если браузер ждет завершения процесса внутри "one()" перед выполнением следующей строки команды. Айсберг попал в титаник, потому что он не ждет. Затем выполните следующее:
one(two) // while two is the callBack parameter
не отличается от:
one()
two()
Я предлагаю использовать setInterval.
function one(){
//--- Write the file to disk
//.....................
}
function runTwo(){
if (check_the_written_file_existence){
clearInterval(t)
two();
}
}
var t = setInterval("runTwo()",500)
Самое главное, что если событие "long process" в функции "one()" произошло, вам просто нужно связать функцию с этим событием. Если, вы не должны проверять результат каким-либо образом за каждый промежуток времени, пока это не будет выполнено.