Отвечая на ваш вопрос одним словом,
Как можно исправить вывод вывода предупреждения?
blockquote>Включив трассировки длинных стеков ].
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.
: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]
Вы не можете, в основном - необходимо попытаться открыть файл для записи, и если Вы получаете исключение, Вы не можете записать в него: (
, Даже если бы Вы могли бы сделать отдельную проверку сначала, результат устарел бы, прежде чем Вы могли начать писать - Вы могли все еще закончить за исключением позже.
было бы хорошо, если бы платформа обеспечила TryOpen
метод по общему признанию...
Единственная опция здесь состоит в том, чтобы поймать исключительную ситуацию и обработать ее соответственно. Посмотрите эти другие два ТАК потоки для полных обсуждений:
Попытайтесь поместить открытую команду в оператор выгоды попытки. Если файл будет использоваться, то IOException будет брошен.
Просто необходимо попробовать открытое доступом совместного использования, который Вы хотели бы и обработали бы ошибку, которая брошена.
Примечание: Иногда файл не будет открываться просто, потому что права совместного доступа к файлам, Вы определили конфликты с правами совместного доступа к файлам, с которыми кто-то уже открыл файл.
см. мой ответ здесь для получения дополнительной информации .
Попробуйте переименовать файл, если вы можете переименовать, тогда это подтверждает, что никакой другой процесс не обращается этот файл. Наконец, убедитесь, что вы переименовали тот же файл в той же папке.