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}'`);
}捕捉(错误){
控制台