Как .then (console.log ()) и .then (() => console.log ()) в цепочке обещаний отличаются по исполнению - PullRequest
0 голосов
/ 13 июня 2018

Есть ли разница в эффективности?Поведение будет другим, если вместо console.log ()

используется setTimeout

1 Ответ

0 голосов
/ 13 июня 2018

По сути, вы можете сделать эти три вещи

.then(console.log())

Это немедленно вызывает console.log, не дожидаясь разрешения обещания, поэтому вы, вероятно, не захотите этого делать.


.then(console.log)

Этот файл console.log выполняется только после успешного разрешения обещания (требуется один вызов функции) и неявно передает результат обещания в функцию console.log.


.then(() => console.log())

Как и прежде, требуется 2 вызова функций, но вы можете легко передать ему некоторые другие аргументы.


Чтобы передать дополнительный аргумент console.log во втором случае, вам необходимо использовать метод Function.prototype.bind.

const promise = new Promise((resolve, reject) => {
  resolve('');
});
promise.then(console.log.bind(console, 'new arg'));

И увидеть все три случая, упомянутых выше в действии

const promise1 = new Promise((resolve, reject) => {
  resolve('promise 1');
});
promise1.then(console.log());

const promise2 = new Promise((resolve, reject) => {
  resolve('promise 2');
});
promise2.then(console.log);

const promise3 = new Promise((resolve, reject) => {
  resolve('promise 3');
});
promise3.then(v => console.log(v));

В первом случае console.log не получил и аргументы.Во втором случае console.log получил значение из обещания неявным образом, а в третьем случае он получил то же значение, но явно.

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

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