【问题标题】:difficult to understand promise and asycn... ;<难以理解的承诺和异步... ;<
【发布时间】:2022-06-10 19:49:13
【问题描述】:

我正在学习 React API。 Promise 和 async 正在使用它。还有……

我找到了 Promise,异步 MDN 文档,但我无法理解“某些函数中的异步总是返回 Promise 对象”

function sleep(ms){
    return new Promise( resolve => setTimeout(resolve, ms));
}

async function process(){
    console.log('hi');
    await sleep(1000);
    console.log('hello');
}


process().then(() => {
    console.log('end')
})

【问题讨论】:

标签: javascript async-await promise


【解决方案1】:

async函数被调用时,它返回一个Promise

如果 async 函数返回一个值,Promise 的状态将通过返回的值进行解析。

如果异步函数抛出异常或某个值,Promise 的状态将被拒绝并抛出值。

await 表达式可以在异步函数中使用,这将暂停异步函数的执行并等待传递给表达式的 Promise 的解析。解析后返回解析后的值,继续执行异步函数。

【讨论】:

    【解决方案2】:

    我们有 Promise 和 Observables 来处理函数或应用程序的异步特性,是的,Async 总是返回一个 Promise,而同步和异步函数都可以返回 obervables。一个promise后跟两个关键字,

    const promise = FooPromise((resolve,reject) = > {
    revolve("i am resolve");
    reject("i am reject");
    )
    

    在此之后,我们定义了如果我们的 Promise 分别被这些关键字解决或拒绝时要做什么。

    .then((resolveMessage) => {
    console.log(resolveMessage);
    }
    .catch((catchMessage) => {
    console.log(CatchMessage);
    }
    

    【讨论】:

      【解决方案3】:

      async return promise object 表示该函数现在返回一个承诺包装器。您可以将其视为临时占位符,而不是发送的实际值。承诺可以被拒绝或解决,直到承诺未完成,它将保持待处理状态。

      这使得异步操作很容易发生,这可能需要一些时间并破坏正常的执行流程。

      此外,.then 语句适用于承诺。如果您尝试在没有异步的情况下进行访问,则会抛出错误,因为它需要一个 Promise 对象。

      function sleep(ms){
          return new Promise( resolve => setTimeout(resolve, ms));
      }
      
      function process(){
          console.log('hi');
          await sleep(1000);
          console.log('hello');
      }
      
      process().then(() => {
          console.log('end')
      })

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-26
        • 2018-07-01
        • 2017-01-22
        • 2015-10-09
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多