我使用的是 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/