По корневому вопросу.Скажем, у вас есть:
function f() {
return 'hello';
}
then()
принимает функцию в качестве параметра.Таким образом, выражение then(f)
говорит: «вызовите f после разрешения обещания. Если вы скажете then(f())
, то, что вы говорите:« передайте результат вызова f (что означает «привет») для then ».f вызывается сразу.
Кроме того, обратите внимание, что, кстати, функция, которую вы передаете затем , будет вызываться с одним параметром, а именно с разрешением обещания, для которого then
прилагается.Например:
someAsyncFn() {
/* return a promise that resolves to "foo!!" */
}
someAsyncFn().then(console.log); // this will log foo!!
Хотя, вероятно, плохой стиль, это означает, что вы можете сказать ...
createPost().then(() => param).then(getPosts);
РЕДАКТИРОВАТЬ
Еще несколько словкогда запускается функция ...
// nothing gets invoked when we define a function
function foo() {
return 'bar';
}
let a = foo; // this doesn't invoke foo. a is now a function
let b = foo(); // this *does* invoke foo, b is now 'bar'
let c = () => 'bar'; // the same as defining a function. it doesn't invoke anything
let d = c; // this doesn't invoke c. d is now a function
let e = c(); // this *does* invoke c, e is now 'bar'
Используя все это, когда мы говорим
.then(getPosts) // this doesn't invoke getPosts
.then(getPosts(params)) // this invokes getPosts and passes the result to then
.then(() => getPosts(params))
Эта последняя формулировка определяет функцию (без имени), которая при вызове (которая еще не) вызовет getPosts с параметрами.Когда мы передаем эту безымянную функцию тогда, мы говорим: «Когда обещание разрешено, вызовите эту безымянную функцию, и эта безымянная функция вызовет getPosts»