Javascript 承诺是否会在不等待的情况下提前退出执行?

Javascript 承诺是否会在不等待的情况下提前退出执行?,javascript,async-await,Javascript,Async Await,以下是如何使用wait: 关键字wait使JavaScript等待,直到该承诺解决并返回其结果 如果应用程序不想等待直到承诺解决并返回(例如更新非关键后端数据库),是否可以调用承诺而不调用等待?在承诺完全完成之前,一个未经调用的承诺是否可以等待提前退出?承诺只是一种封装未来获得一些价值的想法的方式 你不能“要求”承诺 你可以直接使用承诺 const somePromise = someFunctionThatReturnsAPromise() somePromise.then(functionT

以下是如何使用
wait

关键字wait使JavaScript等待,直到该承诺解决并返回其结果


如果应用程序不想等待
直到
承诺解决并返回(例如更新非关键后端数据库),是否可以调用
承诺而不调用
等待
?在承诺完全完成之前,一个未经
调用的
承诺是否可以等待
提前退出?

承诺只是一种封装未来获得一些价值的想法的方式

你不能“要求”承诺

你可以直接使用承诺

const somePromise = someFunctionThatReturnsAPromise()
somePromise.then(functionToCallWhenValueIsAvailable);

function functionToCallWhenValueIsAvailable(value) {
  console.log(value);
}
或者你可以通过wait使用它

const value = await someFunctionThatReturnsAPromise();
console.log(value);

await
只是让代码更简单,但它也在做同样的事情

承诺只是一种封装未来获得一些价值的想法的方式

你不能“要求”承诺

你可以直接使用承诺

const somePromise = someFunctionThatReturnsAPromise()
somePromise.then(functionToCallWhenValueIsAvailable);

function functionToCallWhenValueIsAvailable(value) {
  console.log(value);
}
或者你可以通过wait使用它

const value = await someFunctionThatReturnsAPromise();
console.log(value);
await
只是让代码更简单,但它也在做同样的事情

大致上是的,你可以做。
wait
是您需要异步进程的时候

如果您只需要执行而不需要等待流程,那么您可以直接调用promise而不必等待。这样,整个过程就不会等待并继续为下一步工作

但是,请务必处理此拒绝。您可能需要
Promise.catch
。否则,当promise拒绝时,您将看到
未处理的promise拒绝
错误,并且可能难以调试。

大致上是的,您可以这样做。
wait
是您需要异步进程的时候

如果您只需要执行而不需要等待流程,那么您可以直接调用promise而不必等待。这样,整个过程就不会等待并继续为下一步工作


但是,请务必处理此拒绝。您可能需要
Promise.catch
。否则,当promise拒绝时,您将看到
未处理的promise拒绝
错误,并且可能难以调试。

假设
p
是类型的对象。承诺通常由启动异步操作的函数返回。当异步操作仍在后台运行时,函数立即返回(承诺)

调用代码使用promise对象来知道异步操作何时完成

这可以通过两种方式实现:

  • 使用
    .then()
    /
    .catch()
    。这允许主脚本继续,当异步操作完成时,将调用主脚本提供的回调,以了解实现承诺的方式

    p.then((v)=>console.log(`异步操作成功完成并返回'${v}'))
    .catch((err)=>console.log(`异步操作失败,错误为:${err}`));
    
  • 使用
    wait
    try/catch
    。这样,主脚本将暂停,直到异步操作完成。如果异步代码抛出异常(承诺被拒绝),则在成功执行
    wait
    语句后或使用
    catch
    块后,它将恢复

    试试看{
    v=等待p;
    log(`异步操作成功完成并返回'${v}'`);
    }捕捉(错误){
    log(`异步操作失败,错误为:${err}`);
    }
    
  • 这两种方法都不会影响异步操作的执行方式。它在后台完成它的工作,在某个时候,它完成了(成功或失败)

    如果没有使用这两种同步方法,那么主代码将无法了解异步操作的可信度

    如果异步操作成功完成,没有人知道何时会发生这种情况,并且它返回的值将丢失

    如果它抛出异常,则无法捕获它,并且至少在Node.js中,它会终止整个脚本的执行(因为它是一个未处理的异常,解释器不知道在这种情况下继续是否安全)

    使用上述方法之一,当异步代码引发异常时,将执行使用
    .catch()
    注册的处理程序(在
    .then()/.catch()
    方法中)或
    catch(err)
    后的代码块(在
    wait/try/catch
    方法中),并将异常传递给它(作为
    err
    )。由这些代码来终止程序的执行或记录错误并继续(正如我在上面的示例中所做的那样)


    阅读更多关于和

    让我们假设
    p
    是类型的对象。承诺通常由启动异步操作的函数返回。当异步操作仍在后台运行时,函数立即返回(承诺)

    调用代码使用promise对象来知道异步操作何时完成

    这可以通过两种方式实现:

  • 使用
    .then()
    /
    .catch()
    。这允许主脚本继续,当异步操作完成时,将调用主脚本提供的回调,以了解实现承诺的方式

    p.then((v)=>console.log(`异步操作成功完成并返回'${v}'))
    .catch((err)=>console.log(`异步操作失败,错误为:${err}`));
    
  • 使用
    wait
    try/catch
    。这样,主脚本将暂停,直到异步操作完成。如果异步代码抛出异常(承诺被拒绝),则在成功执行
    wait
    语句后或使用
    catch
    块后,它将恢复

    试试看{
    v=等待p;
    log(`异步操作成功完成并返回'${v}'`);
    }捕捉(错误){
    控制台