Skip to content

Commit b755e42

Browse files
authored
fix: Parse.File.cancel starts new attempt to save file (#1781)
1 parent 04a02f0 commit b755e42

File tree

3 files changed

+62
-14
lines changed

3 files changed

+62
-14
lines changed

gulpfile.js

+17-12
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ const FULL_HEADER = (
6565
' */\n'
6666
);
6767

68-
gulp.task('compile', function() {
69-
return gulp.src('src/*.js')
68+
function compileTask(stream) {
69+
return stream
7070
.pipe(babel({
7171
presets: PRESETS[BUILD],
7272
plugins: PLUGINS[BUILD],
@@ -76,6 +76,10 @@ gulp.task('compile', function() {
7676
plugins: ['minify-dead-code-elimination'],
7777
}))
7878
.pipe(gulp.dest(path.join('lib', BUILD)));
79+
}
80+
81+
gulp.task('compile', function() {
82+
return compileTask(gulp.src('src/*.js'));
7983
});
8084

8185
gulp.task('browserify', function(cb) {
@@ -132,14 +136,15 @@ gulp.task('minify-weapp', function() {
132136
});
133137

134138
gulp.task('watch', function() {
135-
return watch('src/*.js', { ignoreInitial: false, verbose: true })
136-
.pipe(babel({
137-
presets: PRESETS[BUILD],
138-
plugins: PLUGINS[BUILD],
139-
}))
140-
// Second pass to kill BUILD-switched code
141-
.pipe(babel({
142-
plugins: ['minify-dead-code-elimination'],
143-
}))
144-
.pipe(gulp.dest(path.join('lib', BUILD)));
139+
if (BUILD === 'browser') {
140+
const watcher = gulp.watch('src/*.js', { ignoreInitial: false }, gulp.series('compile', 'browserify', 'minify'));
141+
watcher.on('add', function(path) {
142+
console.log(`File ${path} was added`);
143+
});
144+
watcher.on('change', function(path) {
145+
console.log(`File ${path} was changed`);
146+
});
147+
return watcher;
148+
}
149+
return compileTask(watch('src/*.js', { ignoreInitial: false, verbose: true }));
145150
});

integration/test/ParseDistTest.js

+44-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
const puppeteer = require('puppeteer');
2+
const { resolvingPromise } = require('../../lib/node/promiseUtils');
3+
24
let browser = null;
35
let page = null;
46
for (const fileName of ['parse.js', 'parse.min.js']) {
57
describe(`Parse Dist Test ${fileName}`, () => {
68
beforeEach(async () => {
7-
browser = await puppeteer.launch();
8-
page = await browser.newPage();
9+
browser = await puppeteer.launch({ args: ['--disable-web-security'] });
10+
const context = await browser.createIncognitoBrowserContext();
11+
page = await context.newPage();
12+
await page.setCacheEnabled(false);
913
await page.goto(`http://localhost:1337/${fileName}`);
1014
});
1115

@@ -35,5 +39,43 @@ for (const fileName of ['parse.js', 'parse.min.js']) {
3539
expect(obj).toBeDefined();
3640
expect(obj.id).toEqual(response);
3741
});
42+
43+
it('can cancel save file with uri', async () => {
44+
let requestsCount = 0;
45+
let abortedCount = 0;
46+
const promise = resolvingPromise();
47+
await page.setRequestInterception(true);
48+
page.on('request', request => {
49+
if (!request.url().includes('favicon.ico')) {
50+
requestsCount += 1;
51+
}
52+
request.continue();
53+
});
54+
page.on('requestfailed', request => {
55+
if (request.failure().errorText === 'net::ERR_ABORTED' && !request.url().includes('favicon.ico')) {
56+
abortedCount += 1;
57+
promise.resolve();
58+
}
59+
});
60+
await page.evaluate(async () => {
61+
const parseLogo =
62+
'https://raw.githubusercontent.com/parse-community/parse-server/master/.github/parse-server-logo.png';
63+
const file = new Parse.File('parse-server-logo', { uri: parseLogo });
64+
file.save().then(() => {});
65+
66+
return new Promise((resolve) => {
67+
const intervalId = setInterval(() => {
68+
if (file._requestTask && typeof file._requestTask.abort === 'function') {
69+
file.cancel();
70+
clearInterval(intervalId);
71+
resolve();
72+
}
73+
}, 1);
74+
});
75+
});
76+
await promise;
77+
expect(requestsCount).toBe(1);
78+
expect(abortedCount).toBe(1);
79+
});
3880
});
3981
}

src/ParseFile.js

+1
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ class ParseFile {
296296
*/
297297
cancel() {
298298
if (this._requestTask && typeof this._requestTask.abort === 'function') {
299+
this._requestTask._aborted = true;
299300
this._requestTask.abort();
300301
}
301302
this._requestTask = null;

0 commit comments

Comments
 (0)