Javascript “为什么?”;拒绝“;在这个代码中不是真的拒绝吗?
代码本身运行;是否有一个明显的解决办法,我不知何故错过了 Webstorm中的调试器在调试期间突出显示Javascript “为什么?”;拒绝“;在这个代码中不是真的拒绝吗?,javascript,typescript,promise,Javascript,Typescript,Promise,代码本身运行;是否有一个明显的解决办法,我不知何故错过了 Webstorm中的调试器在调试期间突出显示reject语句,但代码从未实际拒绝;然后,调试器突出显示fulfill语句,并最终返回到then块,但是在下一步中会立即跳过then块,然后运行catch块 我还有另外一个承诺,那就是然后捕获代码,我也会返回。我的计划是捕获helper函数的拒绝,在我的主函数捕获它之后,再次将其作为返回值(promise)拒绝 但是,当调试器在从helper函数返回后突出显示catch语句时,似乎跳过了块中的
reject
语句,但代码从未实际拒绝;然后,调试器突出显示fulfill
语句,并最终返回到then
块,但是在下一步中会立即跳过then
块,然后运行catch
块
我还有另外一个承诺,那就是然后捕获代码,我也会返回。我的计划是捕获helper函数的拒绝,在我的主函数捕获它之后,再次将其作为返回值(promise)拒绝
但是,当调试器在从helper函数返回后突出显示catch
语句时,似乎跳过了块中的所有代码(在我的helper函数全部完成并返回到主函数后)
我的拒绝代码:
public static filter(courses: Course[], filterObj: FILTER, comparison: string) {
return new Promise(function (fulfill, reject) {
let filter: any = (<any>filterObj)[comparison];
let names = Object.keys(filter);
if (names.length !== 1)
{
console.log("??");
reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let name = names.toString();
if (!CHelpers.isDataset(name))
{
reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let filterValue: number = filter[name];
if (typeof filterValue !== "number")
{
reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let key: string = CHelpers.getKey(name);
console.log("successfully filtered " + comparison);
fulfill(CHelpers.filterCourses(courses, key, filterValue, comparison));
})
}
我的主要功能如下所示:
doThing(input: any): Promise < {} >
{
return new Promise(function(fulfill, reject) {
let courses: Course[];
let filterObj: FILTER = input.KEY;
let comparisons: string[] = Object.keys(filterObj);
let comparison: string = comparisons[0];
if (comparison === "test") {
CHelpers.filter(courses, filterObj, comparison)
.then(function(filteredCourses: any) {
courses = filteredCourses;
})
.catch(function(err: any) {
return reject(err);
});
} else {
reject({
"code": 400,
"body": {
"error": "invalid body"
}
});
}
let responseBody: {} = {
render: "TABLE",
result: courses
};
fulfill({
"code": 200,
"body": responseBody
});
});
}
doThing(输入:any):Promise<{}>
{
返回新承诺(功能(履行、拒绝){
let课程:课程[];
让filterObj:FILTER=input.KEY;
let比较:string[]=Object.keys(filterObj);
let comparison:string=比较[0];
如果(比较=“测试”){
CHelpers.过滤器(课程、过滤器BJ、比较)
.then(函数(filteredCourses:any){
课程=过滤课程;
})
.catch(函数(错误:任意){
退货拒绝(err);
});
}否则{
拒绝({
“代码”:400,
“正文”:{
“错误”:“无效正文”
}
});
}
let responseBody:{}={
渲染:“表”,
结果:课程
};
履行({
“代码”:200,
“body”:responseBody
});
});
}
拒绝()
不会停止该块中代码的执行。这只是一个函数调用,因此在该函数调用之后,处理程序的其余部分将继续运行。由于承诺是单向状态机,因此在调用reject()
之后,对reject()
或fulfill()
的后续调用将被忽略,但将执行其他console.log()
语句
通常,当您返回时,您会立即从函数返回,这样您就不会再执行任何代码
public static filter(courses: Course[], filterObj: FILTER, comparison: string) {
return new Promise(function (fulfill, reject) {
let filter: any = (<any>filterObj)[comparison];
let names = Object.keys(filter);
if (names.length !== 1)
{
console.log("??");
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let name = names.toString();
if (!CHelpers.isDataset(name))
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let filterValue: number = filter[name];
if (typeof filterValue !== "number")
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let key: string = CHelpers.getKey(name);
console.log("successfully filtered " + comparison);
fulfill(CHelpers.filterCourses(courses, key, filterValue, comparison));
})
}
或作为:
reject(...);
return;
由于reject()
没有返回值,因此这两种形式在功能上是等效的。reject()
不会停止该块中代码的执行。这只是一个函数调用,因此在该函数调用之后,处理程序的其余部分将继续运行。由于承诺是单向状态机,因此在调用reject()
之后,对reject()
或fulfill()
的后续调用将被忽略,但将执行其他console.log()
语句
通常,当您返回时,您会立即从函数返回,这样您就不会再执行任何代码
public static filter(courses: Course[], filterObj: FILTER, comparison: string) {
return new Promise(function (fulfill, reject) {
let filter: any = (<any>filterObj)[comparison];
let names = Object.keys(filter);
if (names.length !== 1)
{
console.log("??");
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let name = names.toString();
if (!CHelpers.isDataset(name))
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let filterValue: number = filter[name];
if (typeof filterValue !== "number")
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let key: string = CHelpers.getKey(name);
console.log("successfully filtered " + comparison);
fulfill(CHelpers.filterCourses(courses, key, filterValue, comparison));
})
}
或作为:
reject(...);
return;
由于reject()
没有返回值,因此这两种形式在功能上是等效的。您应该尝试为fully和reject函数添加返回语句
public static filter(courses: Course[], filterObj: FILTER, comparison: string) {
return new Promise(function (fulfill, reject) {
let filter: any = (<any>filterObj)[comparison];
let names = Object.keys(filter);
if (names.length !== 1)
{
console.log("??");
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let name = names.toString();
if (!CHelpers.isDataset(name))
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let filterValue: number = filter[name];
if (typeof filterValue !== "number")
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let key: string = CHelpers.getKey(name);
console.log("successfully filtered " + comparison);
return fulfill(CHelpers.filterCourses(courses, key, filterValue, comparison));
})
}
公共静态筛选器(课程:课程[],筛选器对象:筛选器,比较:字符串){
返回新承诺(功能(履行、拒绝){
let filter:any=(filterObj)[比较];
让name=Object.keys(过滤器);
如果(names.length!==1)
{
控制台日志(“??”);
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
让name=names.toString();
如果(!CHelpers.isDataset(名称))
{
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
让filterValue:number=filter[name];
if(过滤值的类型!=“编号”)
{
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
let key:string=CHelpers.getKey(name);
console.log(“成功过滤”+比较);
返回完成(CHelpers.filterCourses(课程、关键字、filterValue、比较));
})
}
您应该尝试为fully和reject函数添加返回语句
public static filter(courses: Course[], filterObj: FILTER, comparison: string) {
return new Promise(function (fulfill, reject) {
let filter: any = (<any>filterObj)[comparison];
let names = Object.keys(filter);
if (names.length !== 1)
{
console.log("??");
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let name = names.toString();
if (!CHelpers.isDataset(name))
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let filterValue: number = filter[name];
if (typeof filterValue !== "number")
{
return reject({"code": 400, "body": {"error": "invalid comparison"}});
}
let key: string = CHelpers.getKey(name);
console.log("successfully filtered " + comparison);
return fulfill(CHelpers.filterCourses(courses, key, filterValue, comparison));
})
}
公共静态筛选器(课程:课程[],筛选器对象:筛选器,比较:字符串){
返回新承诺(功能(履行、拒绝){
let filter:any=(filterObj)[比较];
让name=Object.keys(过滤器);
如果(names.length!==1)
{
控制台日志(“??”);
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
让name=names.toString();
如果(!CHelpers.isDataset(名称))
{
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
让filterValue:number=filter[name];
if(过滤值的类型!=“编号”)
{
返回拒绝({“代码”:400,“正文”:{“错误”:“无效比较”});
}
let key:string=CHelpers.getKey(name);
console.log(“成功过滤”+比较);
返回完成(CHelpers.filterCourses(课程、关键字、filterValue、比较));
})
}
thank jfriend00,helper函数正确地拒绝了,但是,我的catch块中的代码没有运行(调试器只突出显示catch语句,但跳过了其中的代码);这是否与“后续拒绝被忽略”有关,还是与其他原因有关?@icda