Skip to content

Commit 5e31e14

Browse files
committed
fix: stop cancel try
1 parent 9eb2a84 commit 5e31e14

File tree

3 files changed

+52
-12
lines changed

3 files changed

+52
-12
lines changed

src/error/stop.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const FoundernetesError = require("./foundernetes")
2+
3+
module.exports = class FoundernetesStopError extends FoundernetesError {
4+
constructor(...args) {
5+
super(...args)
6+
this.name = "AbortError"
7+
}
8+
}

src/loader/create.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ const yaRetry = require("ya-retry")
22
const pick = require("lodash.pick")
33

44
const createValidator = require("~/vars/create-validator")
5+
56
const FoundernetesValidateVarsError = require("~/error/validate-vars")
67
const FoundernetesValidateDataError = require("~/error/validate-data")
8+
const FoundernetesStopError = require("~/error/stop")
9+
710
const ctx = require("~/ctx")
811

912
const castRetry = require("~/lib/cast-retry")
1013

14+
const isAbortError = require("~/utils/is-abort-error")
15+
1116
const getPluginName = require("~/std/get-plugin-name")
1217

1318
module.exports = async (definition) => {
@@ -87,11 +92,14 @@ module.exports = async (definition) => {
8792
const events = ctx.require("events")
8893
const abortSignal = ctx.require("abortSignal")
8994

90-
events.on("stop", () => {
91-
operation.stop()
92-
})
93-
9495
const data = await new Promise((resolve, reject) => {
96+
const stopSignal = () => {
97+
// const logger = ctx.require("logger")
98+
// logger.debug(`loader cancel next try`)
99+
operation.stop()
100+
reject(new FoundernetesStopError())
101+
}
102+
events.on("stop", stopSignal)
95103
operation.attempt(async (currentAttempt) => {
96104
let results
97105
const logger = ctx.require("logger")
@@ -104,14 +112,19 @@ module.exports = async (definition) => {
104112
results = await load(vars)
105113
hasError = false
106114
} catch (err) {
115+
if (isAbortError(err)) {
116+
throw err
117+
}
107118
if (catchErrorAsUndefined) {
108119
hasError = true
109120
results = false
110121
logger.warn(err)
111122
} else {
123+
events.off("stop", stopSignal)
112124
reject(err)
113125
return
114126
}
127+
events.off("stop", stopSignal)
115128
reject(err)
116129
return
117130
}
@@ -123,10 +136,12 @@ module.exports = async (definition) => {
123136
}
124137
if (operation.retry(err)) {
125138
if (abortSignal.aborted) {
139+
events.off("stop", stopSignal)
126140
operation.stop()
127141
}
128142
return
129143
}
144+
events.off("stop", stopSignal)
130145
resolve(results)
131146
})
132147
})

src/play/create.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@ const createValidator = require("~/vars/create-validator")
55
const FoundernetesPlayPostCheckError = require("~/error/play-post-check")
66
const FoundernetesPlayRunError = require("~/error/play-run")
77
const FoundernetesValidateVarsError = require("~/error/validate-vars")
8+
const FoundernetesStopError = require("~/error/stop")
89

910
const getPluginName = require("~/std/get-plugin-name")
1011
const castRetry = require("~/lib/cast-retry")
1112

13+
const isAbortError = require("~/utils/is-abort-error")
14+
1215
const ctx = require("~/ctx")
1316

1417
module.exports = async (definition) => {
@@ -72,12 +75,16 @@ module.exports = async (definition) => {
7275

7376
const retryerCreate =
7477
({ type, retry, retryOnFalse, catchErrorAsFalse, func }) =>
75-
async () => {
76-
const operation = yaRetry.operation(retry)
77-
events.on("stop", () => {
78-
operation.stop()
79-
})
80-
return new Promise((resolve, reject) => {
78+
async () =>
79+
new Promise((resolve, reject) => {
80+
const operation = yaRetry.operation(retry)
81+
const stopSignal = () => {
82+
// const logger = ctx.require("logger")
83+
// logger.debug(`${type} cancel next try`)
84+
operation.stop()
85+
reject(new FoundernetesStopError())
86+
}
87+
events.on("stop", stopSignal)
8188
operation.attempt(async (currentAttempt) => {
8289
let results
8390
const logger = ctx.require("logger")
@@ -90,11 +97,15 @@ module.exports = async (definition) => {
9097
results = await func()
9198
hasError = false
9299
} catch (err) {
100+
if (isAbortError(err)) {
101+
throw err
102+
}
93103
if (catchErrorAsFalse) {
94104
hasError = true
95105
results = false
96106
logger.warn(err)
97107
} else {
108+
events.off("stop", stopSignal)
98109
reject(err)
99110
return
100111
}
@@ -107,15 +118,15 @@ module.exports = async (definition) => {
107118
}
108119
if (operation.retry(err)) {
109120
if (abortSignal.aborted) {
121+
events.off("stop", stopSignal)
110122
operation.stop()
111123
}
112124
return
113125
}
114-
126+
events.off("stop", stopSignal)
115127
resolve(results)
116128
})
117129
})
118-
}
119130

120131
const retry = castRetry(definition.retry, "run")
121132
const checkRetry = castRetry(definition.checkRetry, "check")
@@ -153,6 +164,9 @@ module.exports = async (definition) => {
153164
})
154165
preCheckResult = await preCheckRetryer()
155166
} catch (error) {
167+
if (isAbortError(error)) {
168+
throw error
169+
}
156170
if (catchCheckErrorAsFalse) {
157171
preCheckResult = false
158172
const logger = ctx.require("logger")
@@ -187,6 +201,9 @@ module.exports = async (definition) => {
187201
})
188202
postCheckResult = await postCheckRetryer()
189203
} catch (error) {
204+
if (isAbortError(error)) {
205+
throw error
206+
}
190207
if (catchCheckErrorAsFalse) {
191208
postCheckResult = false
192209
const logger = ctx.require("logger")

0 commit comments

Comments
 (0)