我正在使用节点8.x。因此,我可以访问所有最新的特性,如异步/等待等。
该场景类似于以下内容(语法不正确,仅供解释):
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.
}
基本上,User对象的创建依赖于address对象的创建。我希望createUser函数异步执行,即尽快返回一个promise而不等待address对象的创建。
这个问题的目的不是完成任务,而是了解在异步编程中解决这类问题的最佳方法是什么。
我能想到的方法不多:1:创建一个新的promise对象,并在createUser函数中输入时立即返回。在创建user对象时进行解析。2:使createUser成为一个异步函数,然后返回user promise。使用这种方法面临的问题:
async function createUser()
{
address = await createAddress();
return User.create(name: 'foo', address: userAddress);
}
问题是函数在返回我不想要的控件之前等待地址。(或者,由于函数是异步的,所以它没有任何区别。在我的例子中,性能是一个很大的标准)
当你想返回父对象的承诺,而你的父对象却依赖于子对象的承诺时,如何处理这种承诺依赖。
谢谢.
您可以按原样编写函数,然后取决于如何调用它。您不能使用await
,因为它在当前作用域中阻塞。您可以使用引入一个新的作用域。但是
:
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
使createUser成为一个异步函数,然后返回user promise。问题是函数在返回我不想要的控件之前等待地址。
不,不是。异步函数
会立即向其调用方返回一个承诺。它只在执行其主体中的代码时等待(并在return
时解析承诺)。您的代码可以工作,这正是您应该做的。
考虑以下代码: 这是我得到的输出: 但是如果我把代码改成这样: 我会得到这个: 我很困惑,因为根据文档,应该暂停执行,直到promise得到解决。在这种情况下,第一个示例应该以数组的形式返回
我试图利用es7异步功能,即。 在这里,所有promise*函数都进行ajax调用,并返回或如果ajax响应满足传递的参数,我相信我不能连续使用3个等待,因此需要一种方法来等待所有这些调用以某种方式返回它们的值。
我仍在为承诺而挣扎,但多亏了这里的社区,我取得了一些进步。 我有一个简单的JS函数,它查询解析数据库。它应该返回结果数组,但显然由于查询的异步性质(因此有承诺),函数在结果之前返回,给我留下一个未定义的数组。 我需要做什么才能让这个函数等待承诺的结果呢? 这是我的代码:
我有一个包含100个promise的promise数组。我想等待,直到一个promise以真实的价值实现。另外,我想确保只有x个promise同时运行(设置限制)。 我已经研究了像和这样的方法,但是它们没有并发选项。 我该怎么做呢?
我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语
我看了类似的问题,没有找到一个解决方案,我可以实现到我自己的代码,因此我做了这篇文章。我有以下代码: 最后一个console.log返回undefined,尽管pool.query中的console日志提供了我要查找的正确字符串。我尝试过的这段代码的另一个版本给出了暂挂的promise,而不是未定义的promise。 通过阅读其他文章,我理解这是因为我没有将wait与async函数一起使用。问题是