我想以下列方式为变量分配一个承诺:
const createSingleUser = function createSingleUser(userData) {
return new Promise((resolve, reject) => {
new User(userData)
.save()
.then((user) => {
resolve(user, 'user');
})
.catch((error) => {
reject(error);
});
});
};
let createUsers;
if (users instanceof Array) {
// If we have an array, we're batch creating users
createUsers = new User().createBatchUsers(users); // returns promise
} else {
// If we have a single object, we're only creating one user
createUsers = new User().createSingleUser(users); // returns promise
}
createSingleUser(users)
createUser
.then((result) => {
.....
然而,由于时间问题,这不起作用。是否有另一种方法来制作这样的构造而不必两次编写承诺链?
编辑正如@torazaburo所提到的,如果您创建了一个承诺,它将开始运行。您可以将其分配给变量,但变量将表示正在运行的承诺。这是我面临的问题。这是因为createSingleUser是一个(Promise)对象,而不是一个函数。
答案 0 :(得分:3)
您只需编写一次承诺链:
let createdUsers;
if (users instanceof Array) {
createdUsers = new User().createBatchUsers(users);
} else {
createdUsers = new User().createSingleUser(users);
}
// createSingleUser(users)
// ^^^^^^^^^^^^^^^^^^^^^^^ make sure to drop this line
createdUsers
.then((result) => {
… // handle both cases here
})
答案 1 :(得分:1)
相当不清楚的问题,所以这里有几个答案。
您可以使用Promise.all(arrayOfPromises)
在then()
之前等待多个承诺。
如果您需要运行两次,可以将if-else
代码放在函数中:
function createUsers(users) {
if (users instanceof Array) {
return new User().createBatchUsers(users);
}
return new User().createSingleUser(users);
}
createUsers(users)
.then(() => createUsers(users))
.then(...);