node.js - Nodejs 承诺子解决父承诺
问题描述
我目前有两个承诺,而孩子则取决于父母的成功。我想解决/拒绝子承诺“然后”的父承诺。
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的目标是根据response添加到一个对象,然后解析父promise,后面代码会用到。
这根本行不通。异步并没有真正帮助。
解决方案
您的问题似乎if(data) {
是缺少一个else
您也可以解决承诺的条款。避免Promise
构造函数反模式也有助于避免此类错误。
required(params, required_params) {
var promise;
if (required_params.includes("user_id")) {
const user_key = String(params.userCredentials.user_key);
const user_secret = String(params.userCredentials.user_secret);
promise = User.info(user_key, user_secret).then((data) => {
if (data) {
params.user_id = data[0]._id;
}
// else
// throw error? keep user_id undefined?
})
} else {
promise = Promise.resolve();
}
return promise.then(() => {
var missed_required_params = [];
for (var i = 0; i < required_params.length; i++) {
if (!(required_params[i] in params)) {
missed_required_params.push(required_params[i]);
}
}
if (missed_required_params.length !== 0) {
throw new Error("Missed parameters: " + missed_required_params);
} else {
return params;
}
});
}
推荐阅读
- node.js - 如何在 Nodejs 中使用异步
- android - 离子/科尔多瓦谷歌地图插件的问题
- reporting-services - 两个日期字段中所有值的总和
- reactjs - .map 值通过按键分组
- sql - 如何在sql server中获取一周的总条目数
- sql - COALESCE function is not working when I pass NULL values but it works when declare variables as NULL
- python - 我可以修补 Python 的断言以获取 py.test 提供的输出吗?
- java - 克隆 JPA 实体,包括用 spring 的 createdBy 注释的值
- laravel - 试图在 school.php 中获取非对象的属性
- c - WinAPI - CryptDecrypt() 在 AES 256 中无法正常工作