node.js - 返回一个 Promise,无需等待 Node.js 函数中的依赖 Promise

标签 node.js promise es6-promise

我使用的是 Node 8.x。因此,我可以访问所有最新功能,即 async/await 等。

场景类似于以下 (不正确的语法,仅用于解释):

createUser()
{
    let userAddress = createAddress(); // Aync, returns a promise
    User.create(name: 'foo', address: userAddress); // User creation is dependant on address. Also, User.create returns a promise.
}

基本上,用户对象的创建依赖于地址对象的创建。我希望 createUser 函数异步执行,即尽快返回 promise ,而无需等待创建地址对象。

这个问题的目的不是为了完成任务,而是为了了解解决异步编程中此类问题的最佳方法是什么。

我能想到的几种方法: 1:创建一个新的promise对象,并在createUser函数中输入后立即返回。在创建用户对象时解决它。 2:将createUser设为异步函数,然后返回user Promise。此方法面临的问题:

async function createUser()
{
    address = await createAddress();
    return User.create(name: 'foo', address: userAddress);
}

问题是函数在返回我不想要的控件之前等待地址。 (或者它不会产生任何差异,因为该函数是异步的。在我的情况下,性能是一个重要标准)

如何处理这种 promise 依赖关系,您想要返回父对象的 promise ,但父对象依赖于子对象的 promise 。

谢谢。

最佳答案

您可以按原样编写函数,然后取决于它的调用方式。您不能使用 await 因为它会在当前范围内阻塞。不过,您可以使用 .then 引入新范围:

async function createUser() {
  address = await createAddress();
  return User.create({ name: 'foo', address });
}
...
createUser().then(() => { /* handle user creation */ });
// code here will not wait for `createUser` to finish

关于node.js - 返回一个 Promise,无需等待 Node.js 函数中的依赖 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682400/

相关文章:

javascript - onload 是否有可能返回错误?

javascript - 这是在 Node 中进行依赖注入(inject)的正确方法吗?

javascript - Ajax GET : multiple data-specific calls, 或更少的特定调用?

javascript - 使用 Node.js 迁移到 s3 存储

node.js - winston 自定义传输格式消息

Javascript:使用 setTimeout 重试的函数

coffeescript - $q defer 和 Promise 以及如何使用它们在渲染 View 之前为 Controller 加载数据

javascript - 如何从 promise 中获得结果

Javascript、Promises 和 setTimeout

express - 如何等待所有异步调用完成