2016-02-27 4 views
2

Следующий код возвращает 'can not read property' done 'of undefined'. Я хочу function2 работать, когда function1 делается:.done() не может прочитать свойство undefined

function1 = function() { 
    console.log("hi"); 
} 
function1(); 

function1().done(function2); 

EDIT: Не уверен, что если бы я сделал это правильно, но я попробовал обещание, и это не сработало:

var p = new Promise(function(resolve, reject) { 


    var test = window.location.search.substring(1) + ".html"; 
    console.log(test); 

    $("#main-content").load(test); 

    if($("#main-content") != null) { 
     resolve('Success!'); 
     function2(); 
    } 
    else { 
     reject('Failure!'); 
    } 
}); 

function2 мчит , но не async.

+1

Ваша функция ничего не возвращает, поэтому возвращаемое значение 'undefined'. – Pointy

+0

А, ок. Итак, как я могу запустить функцию2, когда функция 1 выполняется с ее действиями? – Cake

+0

'function1(); function2(); '- вы пытаетесь сделать что-то асинхронно? Если да, то, о чем вы говорите, это [обещает.] (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – Pointy

ответ

1

You не нужно связывать функцию2 с функцией1, чтобы убедиться, что это сделано; код выполняется линейно. Так просто выполнить function1 первый:

var function1 = function() { 
    alert('Observe that I, function1, execute before the lowly function2'); 
} 

var function2 = function() { 
    document.getElementById("yourElement").className = "changeColor"; 
} 

function1(); 
function2(); 

Чтобы увидеть его в действии:

https://jsfiddle.net/ktoeon2f/1/

* Примечание: Я не знаю, почему ваша сделать() Отсрочка не работает, как вы ожидаете; вам придется поделиться больше с вашим предыдущим кодом. *

EDIT 1: конкретное решение Ор был найден здесь:

jQuery: Changing the CSS on an element loaded with ajax?

+0

Да. Но скажем, что ваш div 'yourElement' был загружен с использованием $ ("# myElement"). Load (yourElement.html), функция2 не сможет изменить этот цвет. Или я ошибаюсь? :/ – Cake

+0

Нравится так: https://jsfiddle.net/ktoeon2f/2/ – Cake

+1

Я верю, что вы ищете здесь: http://stackoverflow.com/questions/6866043/jquery-changing-the-css- on-an-element-loaded-with-ajax Дайте это посмотреть и дайте мне знать, если это поможет:] – 8protons

0

если вы хотите function2 выполнить сразу после выполнения function1 вы можете просто сделать, как followng:

function1(); 
function2(); 

(это в случае function1 не запуская никаких операций асинхронной внутри него)

0

Я хочу function2 работать, когда function1 делается:

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

 function1 = function(callback) { 
     console.log("hi"); 
     callback("func 1 done!!"); 
     // function one is done now execute the callback 
     } 
    function2 = function(message){ 
     alert(message); 
     } 
    function1(function2); 
    //passing function2 as a parameter to function 1, 
    //once function one is complete it will execcute the function2 as its passed in 
    // the callback parameter. 
Смежные вопросы