2017-02-20 1 views
0

Я реализовал некоторые функции в javascript, используя обещания, но меня смущает одна вещь, разница b/ж эти дваDiff b/w. Then (doSomething()) и .then (() => doSomething()) в обещаниях

Promise.resolve() 

.then(doSomething()) 

и

.then(() => doSomething()) 
+0

В первом случае функция doSomething должна возвращать другую функцию, потому что .then() нуждается в передаче функции. – Artur

+0

Что конкретно вас смущает? –

ответ

2

then ожидает функцию. В первом случае вы переходите на then результат вызова doSomething(), а во втором случае вы фактически передаете функцию, которая вызывает doSomething().

Те были бы эквивалентны (при условии, что вам не нужно аргументы или this):

Promise.resolve().then(doSomething) 
Promise.resolve().then(() => doSomething()) 
+1

Спасибо, Лукас, вот что я искал – Abhijeet

+1

* «Если doSomething использует это, это будет эквивалентно:« * Это неправильно. В '() => doSomething()', 'this' внутри' doSomething' будет 'undefined' (или глобальный объект). –

+0

@ Лукас Узоры не являются строго эквивалентными – guest271314

1

.then(doSomething()) немедленно вызывает doSomething до then обратного вызова вызывается.

.then(() => doSomething()) создает новую функцию, которая становится обратным вызовом then.

0

Чтобы расширить @Lucas ответ, который является правильным, then в Promise формулируется следующим образом (от MDN):

Promise.then(onFulfilled[, onRejected]); 

Promise.then(function(value) { 
    // fulfillment 
    }, function(reason) { 
    // rejection 
}); 

Так что ваш первый аргумент функции для выполнения, и ваша вторая функция ап аргумент для отклонения, оба аргумента являются функциями, к которым передаются значения, основанные на том, что произошло.

Так что, как @Lucas сказал

Promise.resolve().then(() => doSomething()) фактически вызывает вашу функцию, где, как только проездом в doSomething() вызывает функцию и возвращает значение или неопределенным, если нет возврата, который ничего не будет делать, если эта функция возвращает функция (которая, вероятно, была бы необоснованным способом перейти к возможности использования).

Смежные вопросы