2016-09-16 3 views
0

Я заметил два способа обещать цепочку: Есть ли различия?Разница между двумя способами реализации цепочки обещаний

promise1() 
    .then(promise2) 
    .then(promise3) 
    .then(promise4); 

и

promise1().then(function() { 
    return promise2(); 
    }).then(function() { 
    return promise3(); 
    }).then(function() { 
    return promise4(){ 
    }).then(function() { 
    }); 
+0

'function() {return x()}' это то же самое, что 'x' – georg

+0

, вы не invodked в первом наборе обещаний –

+0

, предполагая, что ваши функции обещания не нуждаются ни в каких аргументах для получения обещания, которое вам нужно они те же, за исключением второго, уродливого. – Redu

ответ

3

Да, есть разница - then называет свой аргумент со значением результата, но ваш второй фрагмент игнорирует paramters и вызывает все функции с нулевыми аргументами. Также гарантируется выполнение с undefined (если он не отклоняется) из-за дополнительного пустого обратного вызова, в отличие от первого фрагмента, который разрешает с возвратным значением promise4(…).

И, конечно, первый из них также намного легче читать.

+0

https://jsbin.com/zehuzihelu/edit?html,js,output Этот код JavaScript представляет собой то, о чем вы говорите. Первая цепочка обещаний введет правильный результат в консоль, но вторая будет регистрироваться неопределенно. – Milos

+0

@Milos да, точно – Bergi

+0

Возможно, вам следует расширить свой ответ с помощью примера кода, было бы понятнее для людей, которые не читают комментарии :) – Milos

2

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

Но есть несколько отличий, которые показывают ваши фрагменты. Один из них - передача аргументов, а второй - возврат результата.

Учитывая первое отличие, первый фрагмент принимает аргументы, хотя вы его не используете, что не так во втором фрагменте, поскольку вы не передаете ни один аргумент и не используете его.

Наконец, учитывая второе различие, вы не возвращаете ничего из этого первого фрагмента, тогда как во втором фрагменте вы вызываете функцию против оператора return из каждого, кроме последнего, что приводит к повторному определению неопределенного в конце ,

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