Допустимые параметры внутри обещания.resolve () и отклонения () - PullRequest
1 голос
/ 29 апреля 2020

Каковы допустимые аргументы, когда речь идет о методах resol () и reject () внутри объекта обещания?

Обычно я вижу строки и числа. Я предполагаю, что большинство других типов данных в js? т.е. объекты, функции, массивы и т. д. c.

let x = new 
Promise(function(resolve,reject){
  resolve("string");
  reject("error");
});

1 Ответ

2 голосов
/ 29 апреля 2020

resolve() можно вызывать с любым типом Javascript. Все, что он делает, это передает это значение тому, кто слушает обещание хоста с .then() или await.

Единственное исключение - если вы разрешите его с помощью "thenable" (всего, что ведет себя как объект обещания), тогда это само обещание будет ожидаться, и разрешенное значение исходного обещания станет разрешенным значением этого нового обещания.

Фактически, нет никакого способа непосредственно разрешить само обещание, потому что resolve() обнаружит, что вы решили выполнить обещание, и применит к нему цепочку. Если у вас когда-либо была причина для этого, вам бы пришлось заключить обещание в объект и разрешить его с помощью объекта.

Ничто не мешает вам передать любое значение Javascript в reject(), но Это часто практикуемое соглашение об отклонении с объектами Error, и существует довольно много кода обработки ошибок, который может быть проще или проще или даже может ожидать, что вы будете использовать объекты Error. Он также имеет то преимущество, что предлагает вам трассировку стека (хотя иногда и меньшую асинхронную трассировку стека), которая, по крайней мере, сообщит вызывающей стороне, где возникла ошибка, если им потребуется дополнительная информация о том, что могло произойти. Но в стандарте или в языке, реализованном на языке, нет ничего, что требовало бы от вас reject() с объектом ошибки.

Вы также можете заметить, что ваш пример вызывает resolve("string"), а затем вызывает reject("error"). Обещание - одноразовое устройство. Первый resolve() или reject(), который вызывается, является единственным, на который обращают внимание - любые последующие вызовы любого из них просто игнорируются. Обещание «фиксирует» первое разрешенное значение или отклоняет причины, по которым вы его указали, и после этого не может быть изменено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...