Bluebird забыли возвращение предупреждение отсутствует

Если это для разных страниц, нет способа.

Я использую эту же страницу, вы можете использовать ее и использовать пейджинг, чтобы получить все 700 записей всего за 7 вызовов API:

/page-id/posts?fields={fields}&limit=100

Конечно, вы получите ВСЕ сообщения таким образом. Нет способа получить его для массива случайных идентификаторов сообщений.

5
задан estus 22 January 2019 в 13:52
поделиться

3 ответа

Вы можете настроить предупреждение для проверки забытых операторов возврата с помощью комбинации свойств wForgottenReturn и longStackTraces из объекта конфигурации. wForgottenReturn является свойством warning и должно иметь значение true и является единственным типом предупреждения, который можно настроить отдельно. Соответствующий ключ переменной среды - BLUEBIRD_W_FORGOTTEN_RETURN. Вы можете проверить документацию для получения дополнительной информации.

const Bluebird = require('bluebird');

Bluebird.config({
    warnings: {
        wForgottenReturn: true
    }, longStackTraces: true,
});


Bluebird.resolve(1).then(() => {
   Bluebird.resolve(2);
}).then(two => console.log(two));

Запуск программы в консоли дает мне:

Warning: a promise was created in a handler at /home/adrianpop/test/bb.js:11:13 but was not returned from it, see 
    at Function.Promise.cast (/home/adrianpop/Downloads/Test/node_modules/bluebird/js/release/promise.js:196:13)
undefined

, что является желаемым вами результатом.

Вы также можете запустить приложение как:

BLUEBIRD_LONG_STACK_TRACES=1 BLUEBIRD_WARNINGS=1 node app.js, производя тот же результат.

Приветствия!

Редактировать:

Из этого выпуска на github мы имеем:

Итак, проблема в том, что Nodejs 6.x по умолчанию не отображает трассировки стека для предупреждений. Есть опция командной строки (--trace-warnings), чтобы включить их. Без этой опции предупреждения Bluebird намного менее полезны. Без стека вызовов может быть очень трудно выяснить, откуда возникло предупреждение.

Более подробную информацию также можно найти:

0
ответ дан Adrian Pop 22 January 2019 в 13:52
поделиться

Отвечая на ваш вопрос одним словом,

Как можно исправить вывод вывода предупреждения?

Включив трассировки длинных стеков ].

const Bluebird = require('bluebird');

Bluebird.config({
    warnings: true,
    longStackTraces: true
})

Bluebird.resolve(1)
.then(() => {
    Bluebird.resolve(2); // should warn about forgotten return
})
.then(two => console.log(two));

Теперь вы должны получить новое демо , которое сообщит вам об этой ошибке:

(node:65) Warning: a promise was created in a handler at evalmachine.<anonymous>:16:14 but was not returned from it, see http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it
    at Function.Promise.cast (/home/runner/node_modules/bluebird/js/release/promise.js:196:13)
undefined

promise.js файл:


Promise.cast = function (obj) {
    var ret = tryConvertToPromise(obj);
    if (!(ret instanceof Promise)) {
        ret = new Promise(INTERNAL);
        ret._captureStackTrace(); //promise.js:196:13 
        ret._setFulfilled();
        ret._rejectionHandler0 = obj;
    }
    return ret;
};

Помните, что в Node.js вы можете настроить предупреждения и длинные трассировки стека для всего процесса, используя переменные среды.


Переход к исходному коду bluebird


var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
    (debugging || util.env("BLUEBIRD_WARNINGS")));

var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
    (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));

var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
    (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));

И

Promise.config = function(opts) {
    opts = Object(opts);
    if ("longStackTraces" in opts) {
        if (opts.longStackTraces) {
            Promise.longStackTraces();
        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
            disableLongStackTraces();
        }
    }
    if ("warnings" in opts) {
        var warningsOption = opts.warnings;
        config.warnings = !!warningsOption;
        wForgottenReturn = config.warnings;

        if (util.isObject(warningsOption)) {
            if ("wForgottenReturn" in warningsOption) {
                wForgottenReturn = !!warningsOption.wForgottenReturn;
            }
        }
    }
    if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
        if (async.haveItemsQueued()) {
            throw new Error(
                "cannot enable cancellation after promises are in use");
        }
        Promise.prototype._clearCancellationData =
            cancellationClearCancellationData;
        Promise.prototype._propagateFrom = cancellationPropagateFrom;
        Promise.prototype._onCancel = cancellationOnCancel;
        Promise.prototype._setOnCancel = cancellationSetOnCancel;
        Promise.prototype._attachCancellationCallback =
            cancellationAttachCancellationCallback;
        Promise.prototype._execute = cancellationExecute;
        propagateFromFunction = cancellationPropagateFrom;
        config.cancellation = true;
    }
    if ("monitoring" in opts) {
        if (opts.monitoring && !config.monitoring) {
            config.monitoring = true;
            Promise.prototype._fireEvent = activeFireEvent;
        } else if (!opts.monitoring && config.monitoring) {
            config.monitoring = false;
            Promise.prototype._fireEvent = defaultFireEvent;
        }
    }
    return Promise;
};

По умолчанию отслеживание длинных стеков, предупреждения, мониторинг и отмена [ 1144] все отключены, помещая их false в производственную среду. Они обнаруживаются и автоматически включаются при включении отладчика в среде разработки.

Я предлагаю вам еще раз просмотреть документацию Bluebird .

Promise.config

Promise.config(Object {
    warnings: boolean=false,
    longStackTraces: boolean=false,
    cancellation: boolean=false,
    monitoring: boolean=false
} options) -> Object;

Настройка трассировки длинных стеков, предупреждений, мониторинга и отмены. Обратите внимание, что хотя здесь по умолчанию используется false, может быть обнаружена среда разработки, которая автоматически разрешает длинные трассировки стека и предупреждения.

Promise.config({
    // Enable warnings
    warnings: true,
    // Enable long stack traces
    longStackTraces: true,
    // Enable cancellation
    cancellation: true,
    // Enable monitoring
    monitoring: true
});

Вы можете настроить предупреждение для проверки забытых операторов возврата с помощью wForgottenReturn:

Promise.config({
    // Enables all warnings except forgotten return statements.
    warnings: {
        wForgottenReturn: false
    }
});

wForgottenReturn - единственный тип предупреждения, который можно настроить отдельно. Соответствующий ключ переменной среды - BLUEBIRD_W_FORGOTTEN_RETURN.


В Node.js вы можете настроить предупреждения и длинные трассировки стека для всего процесса, используя переменные среды:

BLUEBIRD_LONG_STACK_TRACES=1 BLUEBIRD_WARNINGS=1 node app.js

Обе функции включаются автоматически, если установлена ​​переменная среды BLUEBIRD_DEBUG или если переменная окружения NODE_ENV равна "development".

Использование значения 0 явным образом отключит функцию, несмотря на то, что среда отладки будет иным образом активирована:

# Warnings are disabled despite being in development environment
NODE_ENV=development BLUEBIRD_WARNINGS=0 node app.js

Возможно, вы захотите проверить этот официальный источник у одного из участников Bluebird Contributor [ 1141]

0
ответ дан antzshrek 22 January 2019 в 13:52
поделиться

Похоже, что для отображения предупреждений необходимо включить длинные трассировки стека. Вы можете использовать объект config, чтобы включить их ( документы ) ( демо ):

Bluebird.config({
    warnings: true,
    longStackTraces: true
});

Или переменные среды ( документы ) ( demo ):

В Node.js вы можете настроить предупреждения и длинные трассировки стека для всего процесса, используя переменные среды:

BLUEBIRD_LONG_STACK_TRACES=1 BLUEBIRD_WARNINGS=1 node app.js

Обе функции автоматически включается, если установлена ​​переменная среды BLUEBIRD_DEBUG или если переменная среды NODE_ENV равна "development".

и

Чтобы включить отслеживание длинных стеков и предупреждения при разработке узла:

$ NODE_ENV=development node server.js

Чтобы включить отслеживание длинных стеков и предупреждения при создании узла: [1118 ]

$ BLUEBIRD_DEBUG=1 node server.js

См. Переменные среды .


Отредактируйте, почему это необходимо:

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

Обратите внимание, что хотя здесь по умолчанию установлено значение false, может быть обнаружена среда разработки, которая автоматически разрешает отслеживание длинных стеков и предупреждения.

Чтобы предупреждения отображались в производственной среде, нужно не только включать предупреждения, но и включать длинные трассировки стека, см. здесь и здесь [ 1111]. [1 123]

0
ответ дан Andrew Ault 22 January 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: