Если я заменю промисы на глобальном объекте, какие промисы будут использоваться async/await?

Скажем, я заменяю глобальный объект Promise обещаниями Bluebird (например, для поддержки отмены). Если я затем напишу функцию, используя async/await:

async function foo() {
    const response = await fetch(...);
    const result = doSomethingWith(response);
    return result;
}

Какое обещание возвращается здесь?

IIRC, когда код скомпилирован до ES5, он действительно вернет отменяемое обещание Bluebird, поскольку async/await преобразуется для внутреннего использования глобального объекта Promise. Но в ES7, где async/await является нативной конструкцией, будет ли он использовать конструктор Promise в глобальном объекте, или использование нативного будет жестко запрограммировано?


person TheHans255    schedule 19.12.2019    source источник
comment
Пожалуйста, взгляните на github.com/petkaantonov/bluebird/issues/1026.   -  person Jeffrey Devloo    schedule 19.12.2019


Ответы (1)


Собственный синтаксис всегда будет создавать собственные объекты обещаний из текущей области, независимо от того, какое значение имеет глобальная переменная Promise в области.

Транспайлер должен стремиться воссоздать этот опыт, однако, когда он также включает в себя оболочку обещания (которая может быть настроена как пользовательская библиотека), которая должна где-то жить и для простоты, вероятно, будет зависеть от глобального значения Promise.

person Bergi    schedule 20.12.2019