These are chat archives for NodejsRUS/chat

14th
Apr 2016
Myroslav
@werber
Apr 14 2016 11:41
Всем привет, посоветуйте годный таск-менеджер. Юзал крон, node-cron но оказалось что там нету возможности удалить таск, ну или я не нашел до сих пор
Михаил
@muxahuk
Apr 14 2016 13:49
Всем привет, есть вопрос:
events.on( 'action', ( flag, obj ) => {
    flag = false;
    obj.flag = false;
} );
events.on( 'action2', ( flag, obj ) => console.log( flag, obj ) ); // true false - выдаёт

var flag = true;
var obj = { flag = true };

events.emit( 'action', flag, obj );
events.emit( 'action2', flag, obj );
вопрос вот в чём - почему переменная flag не меняется в экшене action, когда obj.flag меняется ? и как сделать что бы менялся flag ?
Akimov Vladimir
@b2whats
Apr 14 2016 13:51
потому что одно ты передаешь по ссылке другое значением
Alex Kheben
@zbitname
Apr 14 2016 13:51
Ссылки
Михаил
@muxahuk
Apr 14 2016 13:52
как передать flag по ссылке ?
Alex Kheben
@zbitname
Apr 14 2016 13:52
Сделать его объектом
Михаил
@muxahuk
Apr 14 2016 13:52
?
Vladislav Botvin
@darky
Apr 14 2016 13:52
Передай сразу false
Akimov Vladimir
@b2whats
Apr 14 2016 13:52
переменные назови по другому и будет тебе счастье
Михаил
@muxahuk
Apr 14 2016 13:53
@b2whats пробовал - не помогло
Akimov Vladimir
@b2whats
Apr 14 2016 13:53
что не помогло ? у тебя это все в 1 замыкании находится ?
Михаил
@muxahuk
Apr 14 2016 13:53
@zbitname т.е. грубо говоря передавать obj а не flag ?
@b2whats переименование переменных внути on не помогло.. это же функции и переменные изолированы..
Vladislav Botvin
@darky
Apr 14 2016 13:54
Блин, ты вызываешь action и action2 в одном call stack и в этот момент времени flag ещё true
Сделай третий аргумент callback
Alex Kheben
@zbitname
Apr 14 2016 13:55
@muxahuk да, самый простой способ.
Vladislav Botvin
@darky
Apr 14 2016 13:55
И внутри вызова action, вызови callback в котором ты вызовешь action2, flag уже будет false
Михаил
@muxahuk
Apr 14 2016 13:56
if( ! node.shouldCollide() || ! node.shouldCollideNode( collide ) ) return;

            let flag = true;

            this.wd.events.emit( 'node:' + node.type + ':collide:node:' + collide.type, flag, node, collide );
            this.wd.events.emit( 'node:' + node.type + ':collide:node:*', flag, node, collide );
            this.wd.events.emit( 'node:*:collide:node:' + collide.type, flag, node, collide );
            this.wd.events.emit( 'node:*:collide:node:*', flag, node, collide );
на практике это выглядит вот так.. и не факт, что на какой-то из эмитов будет вообще подцеплено событие
по этому вариант с колбэками отпадает
@darrrk в одном call stack - так а почему тогда obj меняется ?..
Так я правильно понимаю, что булево значение нельзя передать по ссылке ?
Vladislav Botvin
@darky
Apr 14 2016 14:01
Потому что в action2 замыкается flag переданным параметром, а случае объекта передаётся по ссылке
Akimov Vladimir
@b2whats
Apr 14 2016 14:01
ты понимаешь что такое область видимости ?
Alex Kheben
@zbitname
Apr 14 2016 14:02

Так я правильно понимаю, что булево значение нельзя передать по ссылке ?

Любое скалярное значение передаётся не по ссылке

Михаил
@muxahuk
Apr 14 2016 14:06
let obj = { flag: false };
let flag = obj.flag;
вот это работает отлично! )))
@b2whats да, понимаю.. и тут всё в своей облости видимости как надо
Akimov Vladimir
@b2whats
Apr 14 2016 14:18
ок