Контекст продолжения локального хранения теряется в асинхронном водопаде

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

При вызове асинхронного водопада контекст теряется.

        app.get('/testing/cls',
            function(req, res, next) {
                ns.run(function() {
                    ns.set('currentUser', req.user._id)
                    return next()
                })
            },
            function(req, res) {
                function fn1(cb) {
                    console.log('async fn1', ns.get('currentUser'))
                    return cb()
                }

                function fn2(cb) {
                    console.log('async fn2', ns.get('currentUser'))
                    cb()
                }

                function fn3(cb) {
                    console.log('async fn3', ns.get('currentUser'))
                    cb()
                }

                async.waterfall([
                    fn1,
                    fn2,
                    fn3
                ], function() {
                    console.log('async waterfall done', ns.get('currentUser'))
                    res.send({user: ns.get('currentUser')})
                })
            }
        )

Печатные издания консоли

27/6/2017-11:49:39 - info: (13405) - async fn1 58a1adaslkdjh32e
27/6/2017-11:49:39 - info: (13405) - async fn2
27/6/2017-11:49:39 - info: (13405) - async fn3
27/6/2017-11:49:39 - info: (13405) - async waterfall done

Устранить эту проблему можно, добавив ns.bind(fn2), но это означает, что нужно изменить весь код приложения везде, где у меня есть асинхронность.

Что я делаю неправильно?

Любая помощь приветствуется:)

0 ответов

continuation-local-storageпохоже, совсем не работает с обещаниями. Я обнаружил, что cls-hooked делает (как уже было сказано в предыдущем ответе).

Действительно очень странно, что этим библиотекам уже 2 года без каких-либо фиксаций, и, похоже, нет другого способа реализовать это в node...

Вы пробовали использовать cls-hooked вместо продолжения local-storage. У меня была похожая проблема, и она исправила это.

Другие вопросы по тегам