JS костыли

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Для того, чтобы достать лог из консоли воспользовался кодом:

JavaScript:
window.logOfConsole = [];

var _log = console.log,
    _warn = console.warn,
    _error = console.error;

console.log = function() {
    logOfConsole.push({method: 'log', arguments: arguments});
    return _log.apply(console, arguments);
};

console.warn = function() {
    logOfConsole.push({method: 'warn', arguments: arguments});
    return _warn.apply(console, arguments);
};

console.error = function() {
    logOfConsole.push({method: 'error', arguments: arguments});
    return _error.apply(console, arguments);
};
Все работает, но не понимаю как доставать результат если это Promise

C#:
Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: "MY RESULT"
даже если подождать выполнения, то в консоли он есть, а в логе нет.
Подскажите, пожалуйста)
 

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
И вопрос #2:
можно ли как-то выполнить await функцию в консоли, чтобы зенка не докапывалась?
я понимаю, что она их не поддерживает, но можно же выполнить и потом из лога вытащить.

Вопрос #3:
почему const test1 = dosomth(); это совсем не тоже самое что const test1 = dosomth(); в консоли?
работать с константой потом не получается( её нет
 
Последнее редактирование:

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
можно ли как-то выполнить await функцию в консоли, чтобы зенка не докапывалась?
Уже обсуждали
почему const test1 = dosomth(); это совсем не тоже самое что const test1 = dosomth(); в консоли?
работать с константой потом не получается( её нет
Потому что зенно оборачивает твой код в анонимную функцию, а const имеет блочную область видимости. Если нужно работать с переменной потом, то делай её свойством глобального объекта
 
  • Спасибо
Реакции: Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Уже обсуждали

Потому что зенно оборачивает твой код в анонимную функцию, а const имеет блочную область видимости. Если нужно работать с переменной потом, то делай её свойством глобального объекта
можно, пожалуйста, пример как сделать её свойством глобального объекта
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
  • Спасибо
Реакции: Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
это сработало)

но появилась еще одна проблема(

console.log(window.test1)
показывает:
C#:
Promise {<fulfilled>: {…}}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
param1: "1111111"
param2: "2222222"
param3: "3333333"
__proto__: Object
т.е. все ок.
но когда я пытаюсь их вытащить:
console.log(window.test1.param1)
тот получаю:
undefined

почему так? и как его получить?

п.с. это спустя время, когда уже все выполнилось и доступно

или тут уже функционала зенки не хватает и "наши полномочия всё" и мы голосовали в том топике именно за это?))
 
Последнее редактирование:

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
  • Спасибо
Реакции: Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Потому что ты получаешь промис, а далее его нужно использовать. Чтобы понять как - нужно изучить промисы
ну вот прочитал:

так функционала зенки хватает для этого или нет?
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
  • Спасибо
Реакции: Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
Я правильно понял?: мне нужно обернуть функцию в промис и вызвать с
.then(function (fulfilled)
Ты бы сайт уже кучу раз мог скинуть на самом деле)
Не знаю какую ты функцию там в промис оборачивать хочешь, даже не совсем понимаю смысла этого предложения, но с использованием промиса через then верно
 
  • Спасибо
Реакции: Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Ты бы сайт уже кучу раз мог скинуть на самом деле)
Не знаю какую ты функцию там в промис оборачивать хочешь, даже не совсем понимаю смысла этого предложения, но с использованием промиса через then верно
паааммааагииттееее не понимаю эти долбанные промисы.

let pr1 = new Promise(function(resolve,reject){balance = getBalance('+71231111111');resolve(balance);})

pr1.then(result => console.log('balance:',balance))

получаю в консоль:
balance: Promise {<fulfilled>: "10 rub"}

а в зенке пустота:
79324

обычная функция внутри которой асинхронно запрашивается баланс запросом на сервак.

ну не понимаю как эти 10 рублей вытащить наружу

сама функция, которую оборачиваю, возвращает переменную balance:
79325
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 061
Баллы
93
  • Спасибо
Реакции: Astraport и Castaneda

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Код:
let pr1 = new Promise((res, rej) => {
    let balance = getBalance('+71231111111');
    res(balance);
}).then(data => {
    console.log(data);
})
вот прям за минуту до твоего сообщения переписал так:
JavaScript:
pr1.then(function (result) {console.log('balance:',result)})
и получил баланс
ОГРОМНОЕ спасибо тебе за помощь.
голова кипит
 
  • Спасибо
Реакции: rastvl

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
Иногда сложный многоуровневый JSON проще регулярками распасить.
сделал вот так:

JavaScript:
window.logOfConsole = [];

var _log = console.log,
    _warn = console.warn,
    _error = console.error;

console.log = function() {
    arguments.join = [].join;
    var str = arguments.join(' ');
    logOfConsole.push(str);
    return _log.apply(console, arguments);
};

console.warn = function() {
    arguments.join = [].join;
    var str = arguments.join(' ');
    logOfConsole.push(str);
    return _warn.apply(console, arguments);
};
теперь порядок:
79357
 

Castaneda

Client
Регистрация
24.05.2019
Сообщения
872
Благодарностей
299
Баллы
63
сделал вот так:

JavaScript:
window.logOfConsole = [];

var _log = console.log,
    _warn = console.warn,
    _error = console.error;

console.log = function() {
    arguments.join = [].join;
    var str = arguments.join(' ');
    logOfConsole.push(str);
    return _log.apply(console, arguments);
};

console.warn = function() {
    arguments.join = [].join;
    var str = arguments.join(' ');
    logOfConsole.push(str);
    return _warn.apply(console, arguments);
};
теперь порядок:
Посмотреть вложение 79357
Кто понимает в JS, перепишите, пож, по-человечески, чтобы объекты тоже было видно.
В таком виде если
79591
то в логе уже не видно(
 

Lest

Client
Регистрация
20.03.2020
Сообщения
68
Благодарностей
72
Баллы
18
Про вывод лога JS, на форуме, толковый только этот топик. И то не всё описано. Вот может кому пригодится пример работы получения лога в выполнении JS к которому пришёл.
 

Вложения

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)