Обещание по обратному вызову работает только один раз [дубликат]

Это отлично работает:

  python -m timeit -c "$(cat file_name.py)"
25
задан Luca Vitucci 2 February 2016 в 12:37
поделиться

1 ответ

Поскольку обещания могут быть разрешены только один раз (либо отпустили , либо отклонено), первая победа разрешения и любые дальнейшие вызовы будут проигнорированы. Из docs :

Во всех случаях, когда обещание разрешено (то есть выполнено или отклонено), разрешение является постоянным и не может быть сброшено.

Если я избегаю вызывать отклонение / разрешение несколько раз?

Вы даже можете создать свое приложение, позволяющее двум методам «расы» друг против друга разрешать отложенные, но в целом этого следует избегать, чтобы уменьшить путаницу читателя.

40
ответ дан Bergi 18 August 2018 в 18:30
поделиться
  • 1
    Я не знаю о гонке, я использовал jQuery отложенные именно для этого. например перейдите к следующему экрану, когда пользователь нажмет или когда закончится время. «В зависимости от того, что наступит раньше». Мне кажется странным, что библиотеки, такие как Kew.js, на самом деле бросают ошибку при попытке решить дважды. :( – bfred.it 9 June 2014 в 18:30
  • 2
    @ bfred.it: Да, вы можете сделать это. Но лучше явно сделать Q.race(getNextUserClick(), Q.timeout(…)).then(nextScreen), чем с одним отложенным и вручную разрешить это несколько раз. – Bergi 9 June 2014 в 18:40
  • 3
    Race интересен, но kew.js на самом деле не имеет этого, к сожалению. – bfred.it 9 June 2014 в 21:49
Другие вопросы по тегам:

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