Skip to content

Commit c37db7b

Browse files
committed
Merge pull request #203 from ParsePlatform/nlutsenko.cloud.reject
Fixed Cloud functions/triggers async rejection crashing server.
2 parents 26a60f2 + f035307 commit c37db7b

File tree

3 files changed

+50
-3
lines changed

3 files changed

+50
-3
lines changed

cloud/main.js

+19-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,19 @@ Parse.Cloud.define('hello', function(req, res) {
44
res.success('Hello world!');
55
});
66

7-
Parse.Cloud.beforeSave('BeforeSaveFailure', function(req, res) {
7+
Parse.Cloud.beforeSave('BeforeSaveFail', function(req, res) {
88
res.error('You shall not pass!');
99
});
1010

11+
Parse.Cloud.beforeSave('BeforeSaveFailWithPromise', function (req, res) {
12+
var query = new Parse.Query('Yolo');
13+
query.find().then(() => {
14+
res.error('Nope');
15+
}, () => {
16+
res.success();
17+
});
18+
});
19+
1120
Parse.Cloud.beforeSave('BeforeSaveUnchanged', function(req, res) {
1221
res.success();
1322
});
@@ -27,6 +36,15 @@ Parse.Cloud.beforeDelete('BeforeDeleteFail', function(req, res) {
2736
res.error('Nope');
2837
});
2938

39+
Parse.Cloud.beforeSave('BeforeDeleteFailWithPromise', function (req, res) {
40+
var query = new Parse.Query('Yolo');
41+
query.find().then(() => {
42+
res.error('Nope');
43+
}, () => {
44+
res.success();
45+
});
46+
});
47+
3048
Parse.Cloud.beforeDelete('BeforeDeleteTest', function(req, res) {
3149
res.success();
3250
});

spec/ParseAPI.spec.js

+29-1
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,26 @@ describe('miscellaneous', function() {
153153
});
154154

155155
it('basic beforeSave rejection', function(done) {
156-
var obj = new Parse.Object('BeforeSaveFailure');
156+
var obj = new Parse.Object('BeforeSaveFail');
157+
obj.set('foo', 'bar');
158+
obj.save().then(() => {
159+
fail('Should not have been able to save BeforeSaveFailure class.');
160+
done();
161+
}, () => {
162+
done();
163+
})
164+
});
165+
166+
it('basic beforeSave rejection via promise', function(done) {
167+
var obj = new Parse.Object('BeforeSaveFailWithPromise');
157168
obj.set('foo', 'bar');
158169
obj.save().then(function() {
159170
fail('Should not have been able to save BeforeSaveFailure class.');
160171
done();
161172
}, function(error) {
173+
expect(error.code).toEqual(Parse.Error.SCRIPT_FAILED);
174+
expect(error.message).toEqual('Nope');
175+
162176
done();
163177
})
164178
});
@@ -250,6 +264,20 @@ describe('miscellaneous', function() {
250264
// We should have been able to fetch the object again
251265
fail(error);
252266
});
267+
})
268+
269+
it('basic beforeDelete rejection via promise', function(done) {
270+
var obj = new Parse.Object('BeforeDeleteFailWithPromise');
271+
obj.set('foo', 'bar');
272+
obj.save().then(function() {
273+
fail('Should not have been able to save BeforeSaveFailure class.');
274+
done();
275+
}, function(error) {
276+
expect(error.code).toEqual(Parse.Error.SCRIPT_FAILED);
277+
expect(error.message).toEqual('Nope');
278+
279+
done();
280+
})
253281
});
254282

255283
it('test beforeDelete success', function(done) {

triggers.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ var getResponseObject = function(request, resolve, reject) {
5757
return resolve(response);
5858
},
5959
error: function(error) {
60-
throw new Parse.Error(Parse.Error.SCRIPT_FAILED, error);
60+
var scriptError = new Parse.Error(Parse.Error.SCRIPT_FAILED, error);
61+
return reject(scriptError);
6162
}
6263
}
6364
};

0 commit comments

Comments
 (0)