reactjs回调在调用之前被触发

时间:2018-06-21 11:33:25

标签: javascript promise axios

我尝试用axios.all()链接多个axios请求,并将回调传递给执行调用的函数。在我用callback分散结果之后尝试调用axios.spread()之后,但是在收到数据之前,第二个带有then()的{​​{1}}被触发,因此我可以t将正确的数据发送到商店。

以下是操作:

callback

1 个答案:

答案 0 :(得分:1)

它立即被触发,因为您正在立即调用它。尝试这样:

.then( () => callback( updateSchedules ) );

.then方法使用两个回调函数作为参数。一个成功就是一个失败。

const foo = () =>
  new Promise( ( resolve, reject) => resolve( "success"))
    .then(
          success => console.log( success ),
          failure => console.log( failure )
    );

foo();

例如,在上面的代码中,我们的Promise控制台根据Promise情况记录成功或失败。如果不需要显式的参数,我们可以省略回调并使用console.log(作为我们的函数)。

const foo = () =>
  new Promise( ( resolve, reject) => resolve( "success"))
    .then( console.log, console.log );

foo();

这与以前相同。但是,再次,console.log不会立即在这里触发,因为我们没有调用它,只是将它与引用一起使用。

对于您的情况,如果不需要参数,可以使用上面的示例中的函数:

const foo = ( customFunction ) => {
  new Promise( ( resolve, reject) => resolve( "success"))
    .then( console.log, console.log )
    .then( customFunction );
}

const customFunction = () => console.log( "custom message" );

foo( customFunction );

在这里,我们省略了成功的回调函数,但是使用customFunction作为引用,不会调用它。有用。但是,如果我们需要一个参数并在没有回调的情况下使用它,则该参数将不起作用并会立即触发,因为实际上是在调用它:

const foo = ( customFunction ) => {
  new Promise( ( resolve, reject) => resolve( "success"))
    .then( console.log, console.log )
    .then( customFunction( "custom message") );
}

const customFunction = ( message ) => console.log( message );

foo( customFunction );

因此,我们使用成功回调函数来解决此问题:

const foo = ( customFunction ) => {
  new Promise( ( resolve, reject) => resolve( "success"))
    .then( console.log, console.log )
    .then( () => customFunction( "custom message") );
}

const customFunction = ( message ) => console.log( message );

foo( customFunction );