在这种情况下如何保持类似承诺的 API ?
How to maintain a promise-like API in this case?
function foo(options) {
if(!isValid(options)) {
// I want to return a resolved promise here to permit client code to continue without a failure
}
return promisifiedThirdPartyApi(options); // Does not handle an invalid options object successfully
}
在 "invalid" 案例中,我如何惯用地 return 已解决的承诺?
function foo(options) {
return new Promise(function(accept, reject) {
if(!isValid(options)) {
reject();
}
promisifiedThirdPartyApi(options).then(function() {
accept();
});
});
}
请注意,Q 可能有一些快捷方式...
原生承诺
看看原生 Promise 对象的静态方法 resolve
and reject
。
function foo(options) {
if(!isValid(options)) {
return Promise.resolve();
}
return promisifiedThirdPartyApi(options);
}
Angular$q
使用 $q.when
来 return 来自某个非 Promise 对象的已解决 Promise:
function foo(options) {
if(!isValid(options)) {
return $q.when([]);
}
return promisifiedThirdPartyApi(options);
}
Q 承诺
使用 Q.resolve()
,其中 return 是已解决的承诺。
function foo(options) {
if(!isValid(options)) {
return Q.resolve();
}
return promisifiedThirdPartyApi(options);
}
function foo(options) {
if(!isValid(options)) {
// I want to return a resolved promise here to permit client code to continue without a failure
}
return promisifiedThirdPartyApi(options); // Does not handle an invalid options object successfully
}
在 "invalid" 案例中,我如何惯用地 return 已解决的承诺?
function foo(options) {
return new Promise(function(accept, reject) {
if(!isValid(options)) {
reject();
}
promisifiedThirdPartyApi(options).then(function() {
accept();
});
});
}
请注意,Q 可能有一些快捷方式...
原生承诺
看看原生 Promise 对象的静态方法 resolve
and reject
。
function foo(options) {
if(!isValid(options)) {
return Promise.resolve();
}
return promisifiedThirdPartyApi(options);
}
Angular$q
使用 $q.when
来 return 来自某个非 Promise 对象的已解决 Promise:
function foo(options) {
if(!isValid(options)) {
return $q.when([]);
}
return promisifiedThirdPartyApi(options);
}
Q 承诺
使用 Q.resolve()
,其中 return 是已解决的承诺。
function foo(options) {
if(!isValid(options)) {
return Q.resolve();
}
return promisifiedThirdPartyApi(options);
}