通常,您对异步代码使用promises ...但有时您需要在执行异步代码之前检查同步变量的状态。
在向链上返回promise对象之前,不能调用promise.reject方法。那么,通常处理这种方式的方式是什么?
function somePromiseFunction(opts) {
var promise = new Oath();
if( opts.requiredParam === undefined ) {
// How can I reject here?
// We haven't returned the promise to the calling function yet so we get an error
}
// async code here... when done it calls either promise.resolve or promise.reject
return promise.promise;
}
答案 0 :(得分:1)
我正在使用node.js的誓言诺言库,但我认为这几乎适用于任何。
我认为在promise.reject
之前调用return promise.promise;
导致问题。事实证明,问题是我的其余功能仍在执行,这是导致异常的原因。
或者,可以包含一个else语句......
if( opts.requiredParam === undefined ) {
promise.reject("Missing required param");
return promise.promise; // <-- required otherwise the function will continue to execute
}
var x = opts.requiredParam.foo; // Would cause Uncaught exception otherwise
答案 1 :(得分:0)
您可以抛出或只是致电promise.reject
而不要进行异步工作。
答案 2 :(得分:0)
您可以拒绝“延期”对象。
你没有说你正在使用什么库,但我会假设jQuery:
var dfd = jQuery.Deferred();
// ....
dfd.reject(...)
如果您在延迟对象上调用了.promise()
,那么您将获得一个只读接口,并且您无法使用该对象解析/拒绝承诺
var promise = dfd.promise(); // can't be used to reject or resolve
您只能使用dfd
对象拒绝或解决承诺。 promise
不允许您这样做。
答案 3 :(得分:0)
function somePromiseFunction(opts) {
var promise = new Oath();
if( opts.requiredParam === undefined ) {
promise.reject("You suck");
}
// async code here... when done it calls either promise.resolve or promise.reject
return promise.promise;
}
您不需要返回拒绝它的承诺,在返回之前我将被拒绝,并且在函数返回时仍会在promise上调用正确的回调。