Node.js:异步调用后执行代码的哪些部分?

Ada*_*tan 6 javascript asynchronous node.js

异步调用是javascript的固有部分,使用回调通常是处理这些调用的优雅工具.

但是,我不太确定异步操作后代码的分支是如何决定的.例如,以下代码会发生什么?

function f(callback) {
   value = some_async_call();
   if (value) {
       callback(value);
   }
   return(value);
}
Run Code Online (Sandbox Code Playgroud)

这会发生什么?从我的简短JS经验来看,return会发回一个undefined值.但是假设value从异步调用返回true,是否会使用正确的值或undefined值调用回调?

换句话说,是否存在关于在异步调用之后立即执行哪些操作以及哪些操作被延迟直到返回值的规则?

在问之前我尝试了什么

SFTW用于在javascript中分支异步调用,但没有发现任何规范或决定性的内容.

And*_*nov 4

你说得对,undefined会被退回。您在异步操作后执行逻辑,您应该将回调传递到该函数中。您尝试以同步方式使用代码并async/await进行救援。假设some_async_call returns Promise你可以写:

async function f(callback) {
  var value = await some_async_call();
  if (value) {
    callback(value);
  }
  return value;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您的函数将返回Promise值并且也是异步的。在这里阅读更多内容。

更重要的是,您不需要传递回调。您可以await在客户端代码中使用您的函数并从那里执行回调。

关于分支,无需使用即可进行分支的唯一方法async/await是接受some_async_call接受valueas 参数的回调:

function f(callback) {
 some_async_call(function(value) {
   if (value) {
     callback(value);
   }
 });
}
Run Code Online (Sandbox Code Playgroud)

再次重申,除了 之外,没有其他方法可以从异步方法返回值Promise。或者ObservableRxJS中。