【发布时间】:2019-09-29 15:01:53
【问题描述】:
我目前有两个承诺,而孩子则依赖于父母的成功。我想从子承诺“然后”中解决/拒绝父承诺。
const UserApplicaiton = require('../applications/user'), User = new UserApplicaiton();
class CheckParams {
constructor() { }
required(params, required_params) {
return new Promise(function(resolve, reject, onCancel) {
// set i
var i;
// set missed_required_params
var missed_required_params = [];
// check for userCredentials if user_id is required param, convert from credentials to user_id
if(required_params.includes("user_id")){
// set as const
const user_key = String(params.userCredentials.user_key);
const user_secret = String(params.userCredentials.user_secret);
// check in database
User.info(user_key, user_secret).then((data) => {
// if data
if(data) {
// add user_id to params
params.user_id = data[0]._id;
// loop params
for(i = 0; i < required_params.length; i++){
// if params that's required is there, else add to array
if(!(required_params[i] in params)){
missed_required_params.push(required_params[i]);
}
}
if(missed_required_params.length !== 0){
reject("Missed parameters: " + missed_required_params);
}else{
resolve(params);
}
}
}).catch((err) => {
reject(err);
});
}else{
// loop params
for(i = 0; i < required_params.length; i++){
// if params that's required is there, else add to array
if(!(required_params[i] in params)){
missed_required_params.push(required_params[i]);
}
}
if(missed_required_params.length !== 0){
console.log("hello");
return reject("Missed parameters: " + missed_required_params);
}else{
console.log("hello2");
resolve(1);
}
}
});
}
}
module.exports = CheckParams;
第二个promise的目标是根据响应添加到一个对象,然后解析父promise,后面代码会用到。
这根本不起作用。异步并没有真正的帮助。
【问题讨论】:
-
什么不起作用?在
// fetch from database之后你会打电话解决吗 -
解析没有解析父 Promise。我调用
// but that doesn't work下的解析,这将使其运行直到 cURL(使用 express)终止。我的目标是在这种状态下解决父承诺@gp。 -
您应该调用
resolve()或更好的名称,例如resolve(obj),而不是resolve(resolve)。您的外部then回调需要一个data参数,因此您应该相应地履行您的承诺。 -
@Bergi 这对父母的承诺不起作用
-
同时避免
Promiseconstructor antipattern!外面的new Promise是不必要的,你should do conditionals without it。