Какова правильная терминология для обещаний javascript
я путаюсь с другой терминологией, разбросанной вокруг. Из моего понимания, обещание может быть:
fulfilled
rejected
pending
settled
resolved
defer
означает ли решение урегулировано? или это означает его исполнение? а что такое отсрочка?
3 ответов
терминология может быть трудно.
Давайте возьмем из обещания/а+ спецификация и соответствующий раздел ES6 что есть 3 государства:
- до - обещание еще не приняло значения, его будущее все еще неопределенно.
- выполнены - обещание успешно получил стоимостью "назначенные"
- отклонено - обещание дается причина почему результат не может быть получен, как правило, ошибка.
термин урегулированы является гиперонимом для выполненного и отклоненного, что означает либо-противоположность ожиданию.
динамические глаголы выполнить и отклонение опишите изменение состояния из ожидающего в выполненное или отклоненное. Эти переходы называются исполнение или отказ обещания.
это просто. Теперь, resolve - это другой зверь. Иногда он используется как синоним "исполнения", но лучше понимать его как разрешение судьбы обетования либо исполненного, либо отвергнутого. The разрешение (редко: урегулирование) обещания означает, что оно покидает ожидающее состояние. Но даже это не точно - проблема заключается в рекурсивной природе Обещать Процедура:
- разрешение обещания с "простым" значением означает его выполнение
-
разрешения обещание обещание (или thenable) означает принятие своего состояния:
- решение с исполненным обещанием-это исполнение
- решение с отклоненным обещанием-это отказ
- разрешение с ожидающим обещанием означает ожидание его разрешения
да, если обещание разрешено, возможно, даже неизвестно, будет ли оно выполнено или отвергнуто. Но это означает, что судьба не определено, поскольку это связано с обещанием, которое мы решили (обратите внимание, что вы можете решить обещание только один раз).
игнорируя этот частный случай, a разрешить обещание обычно означает установленное обещание.
или, чтобы привести ECMAScript 6 Спецификация:
обещание разрешить если он установлен или если он был "заблокирован", чтобы соответствовать состоянию другого обещания. Попытка решить или отклонить решенное обещание не имеет никакого эффекта. Обещание нерешенные если он не разрешен. Нерешенным обещание всегда находится в состоянии ожидания. Решенное обещание может быть отложено, выполнено или отклонено.
и что нахрена отложить?
отложить результат означает, что вы возвращаете (асинхронное) обещание для результата, а не результат напрямую (синхронно). А также вернуть отложенный отказ вместо того, чтобы бросать синхронно.
обратите внимание, что"отложить" также используется в некоторых библиотеках ( Q) как имя метода для построения
три состояния обещания перечислены в раздел 2.1 спецификации Promises/A+.
спецификации:
так вот каждый из терминов, о которых вы спросили:
до является начальным состоянием обещания. Работу, представленную обещание еще не filfilled или отклонено.
выполнены является еще одним из трех обещанных состояний. Это означает, что обещание было выполнено и теперь имеет свою разрешенную ценность. Операция, представленная обещанием, была успешно завершена.
отклонено является еще одним из трех обещанных состояний. Это означает, что обетование было отвергнуто и теперь имеет свою отвергнутую причину. Операция, представленная promise не удалось получить значение и, таким образом, имеет причину не сделать это (как правило, код ошибки или объект ошибки, но это может быть что угодно.)
урегулированы это термин, который означает, что обещание либо выполнено, либо отклонено (например, оно больше не ожидает), но это не отдельное состояние, а просто описательный термин, чтобы указать, что оно больше не ожидает.
разрешить - это термин, который часто используется для обозначения того же, что и fulfilled
, но эти два не совсем то же самое. Обещание может быть разрешено со значением, которое приводит к выполнению, или оно может быть разрешено с отклоненным обещание (что приводит к отказу от этого обещания) или оно может быть разрешено с ожидающим обещанием (что означает, что теперь оно будет ждать возможного состояния какого-то другого обещания).
трудно сказать точно, что вы подразумеваете под отложить. Обещания часто классифицируются как deferred
объекты в том, что они являются объектом, представляющим действие и результат, который откладывается на будущее (это произойдет в будущем). В некоторых реализациях обещаний на самом деле есть два типы объектов, а
Доменик Denicola это "состояния и судьбы " это хорошее, содержательное резюме.
гласит:
- обещание выполнены если
promise.then(f)
вызовет f "как можно скорее" - обещание отклонено если
promise.then(undefined, r)
вызовет r "как можно скорее" - обещание до если оно не исполнено и не отвергнуто.
судьбы:
- обещание is разрешить если попытка разрешить или отклонить его не имеет никакого эффекта, т. е. обещание было "заперто", чтобы либо следовать другому обещанию, либо было выполнено или отклонено
- обещание нерешенные если он не разрешен, то есть если попытка разрешить или отклонить его будет иметь влияние на обещание.
перейдите по ссылке для получения подробной информации "связанные состояния и судьбы".