изменение переменной при запуске службы

В отличие от обоих ответов в комментариях - есть разница.

Хотя

Promise.resolve(x);

в основном совпадает с

new Promise(function(r){ r(x); });

, там является тонкостью.

Функции возврата обещаний обычно должны иметь гарантию, что они не должны бросать синхронно, так как они могут асинхронно бросать. Чтобы предотвратить неожиданные результаты и условия гонки - броски обычно преобразуются в возвращенные отклонения.

Учитывая это - когда спецификация была создана, конструктор обещаний выбрасывает сейф.

Что если someObject есть undefined?

  • Путь A возвращает отклоненное обещание.
  • Путь B синхронно бросается.

Bluebird увидев это, и Петка добавил Promise.method, чтобы решить эту проблему, чтобы вы могли продолжать использовать возвращаемые значения. Таким образом, правильный и простой способ написать это в Bluebird на самом деле не так: это:

var someFunction = Promise.method(function someFunction(someObject){
    someObject.resolved = true;
    return someObject;
});

Promise.method будет конвертировать броски для отклонения и возврата к разрешению для вас. Это самый безопасный способ бросить это, и он ассимилирует then ables через возвращаемые значения, чтобы он работал, даже если someObject на самом деле является обещанием.

В общем случае Promise.resolve используется для сдачи объектов и иностранных обещаний (thenables) для обещаний. Это его прецедент.

0
задан ferhat Clk 13 July 2018 в 14:52
поделиться