我只是想了解它的好处:
const populateUsers = done => {
User.remove({}).then(async () => {
const userOne = new User(users[0]).save();
const userTwo = new User(users[1]).save();
const usersProm = await Promise.all([userOne, userTwo]).then(() => done());
return usersProm;
});
};
对此:
const populateUsers = done => {
User.remove({})
.then(() => {
const userOne = new User(users[0]).save();
const userTwo = new User(users[1]).save();
return Promise.all([userOne, userTwo]);
})
.then(() => done());
};
我之所以遇到这个问题,是因为eslint建议我在此函数中使用async,并且我还记得这个概念,使其在我的应用程序中可以正常工作,但是我不确定为什么我应该使用它而不是原来的方式>
答案 0 :(得分:0)
您的第一个版本并非一路走来。这样做:
const populateUsers = done => {
User.remove({}).then(async () => {
const userOne = new User(users[0]).save();
const userTwo = new User(users[1]).save();
await Promise.all([userOne, userTwo]);
const usersProm = await done();
return usersProm;
});
};
没什么区别,只是没有这些then
回调的代码更容易阅读。
您甚至可以将其应用于外部函数:
const populateUsers = async () => {
await User.remove({});
const userOne = new User(users[0]).save();
const userTwo = new User(users[1]).save();
await Promise.all([userOne, userTwo]);
const usersProm = await done();
return usersProm;
};
现在populateUsers
返回了诺言,而不是undefined
。
评论中的结论:您会因为populateUsers
返回了一个承诺并接受一个done
回调参数而收到错误,而其中的一个是预期的,不是两者都是。
答案 1 :(得分:0)
您的原始代码完全没问题。
否,使用第一个代码段中的代码没有任何好处。您应该avoid mixing await
and .then(…)
syntax!要使用class:<class 'numpy.ndarray'>
/ async
,您需要使用整个函数await
,而不是async
回调:
then
(可能您还会删除该async function populateUsers(done) {
await User.remove({})
const userOne = new User(users[0]).save();
const userTwo = new User(users[1]).save();
await Promise.all([userOne, userTwo]);
return done();
}
回调-该函数已经返回了Promise)