Файл используется другим процессом [дубликат]

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

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

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]

20
задан NileshChauhan 26 July 2010 в 17:48
поделиться

5 ответов

Вы не можете, в основном - необходимо попытаться открыть файл для записи, и если Вы получаете исключение, Вы не можете записать в него: (

, Даже если бы Вы могли бы сделать отдельную проверку сначала, результат устарел бы, прежде чем Вы могли начать писать - Вы могли все еще закончить за исключением позже.

было бы хорошо, если бы платформа обеспечила TryOpen метод по общему признанию...

19
ответ дан 30 November 2019 в 00:05
поделиться

Единственная опция здесь состоит в том, чтобы поймать исключительную ситуацию и обработать ее соответственно. Посмотрите эти другие два ТАК потоки для полных обсуждений:

8
ответ дан 30 November 2019 в 00:05
поделиться

Попытайтесь поместить открытую команду в оператор выгоды попытки. Если файл будет использоваться, то IOException будет брошен.

1
ответ дан 30 November 2019 в 00:05
поделиться

Просто необходимо попробовать открытое доступом совместного использования, который Вы хотели бы и обработали бы ошибку, которая брошена.

Примечание: Иногда файл не будет открываться просто, потому что права совместного доступа к файлам, Вы определили конфликты с правами совместного доступа к файлам, с которыми кто-то уже открыл файл.

см. мой ответ здесь для получения дополнительной информации .

2
ответ дан 30 November 2019 в 00:05
поделиться

Попробуйте переименовать файл, если вы можете переименовать, тогда это подтверждает, что никакой другой процесс не обращается этот файл. Наконец, убедитесь, что вы переименовали тот же файл в той же папке.

0
ответ дан 30 November 2019 в 00:05
поделиться
Другие вопросы по тегам:

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