Как асинхронно вызывать пользовательскую функцию с помощью javascript?

#javascript #angular #oojs

Вопрос:

Я использую в своем приложении один сторонний модуль angular. Этот модуль предоставляет некоторые методы обратного вызова, такие как успех входа в систему, сбой и т.д., И я выполняю свои пользовательские сценарии внутри метода обратного вызова.

Но проблема здесь в том, что я хочу выполнить свой пользовательский сценарий асинхронно, что означает, что обратный вызов не должен ждать, пока мой пользовательский сценарий не будет выполнен. Теперь, если в сценарии есть какие-либо проблемы, их обратный вызов не завершается, и из-за этого влияет весь сценарий. Поэтому я хочу вызвать свой пользовательский метод асинхронно из события обратного вызова третьей стороны.

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

 EV.Event.on('login.success', function (res) { //third party's callback
    try {
        custCallbackLoginSuccess(res); //my custom method
    } catch(Error) {
        console.log("error" Error);
    }
});

async function custCallbackLoginSuccess(res) {
    var success = test; //here test is undefied. so 'login.success' -should not wait untill this execution completes. It should complete without any error
}
 

Ответ №1:

поскольку custCallbackLoginSuccess это асинхронная функция, ваш try-catch login.success не обнаружит никаких ошибок.

вы должны написать свой код так:

 EV.Event.on('login.success', function (res) { //third party's callback
     custCallbackLoginSuccess(res); //your custom method
});

async custCallbackLoginSuccess(res) {
    try {
        var success = test;
    } catch(Error) {
        console.log("error" Error);
        // don't throw any error here if you don't want to disturb the caller
    }
}
 

если вам нужен результат custCallbackLoginSuccess в login.success , у вас нет другого выбора, кроме как ждать, чтобы получить его результат.

Комментарии:

1. Спасибо вам за ответ. Я попробовал вышесказанное, но все равно «вход.успех» не завершен. Это выбрасывает ошибку

2. можете ли вы дать мне стек вызовов ошибок? возможно, загрузите его куда-нибудь