鉴于somePromise(param
我想创建另一个承诺,进行一些处理,然后根据somePromise的结果解析/拒绝:
function wrapPromise() {
return new Promise(function(resolve, reject) {
// some processing
somePromise(someParam).then(function() { resolve(); }, function(err) { reject(err); });
});
}
这是正确的方法吗?还是有更短的语法?
答案 0 :(得分:1)
不需要额外的承诺。只需进行处理,然后返回承诺。
function wrapPromise() {
// some processing
return somePromise(someParam);
}
答案 1 :(得分:1)
您要求的是I will make a promise to make a promise. And, therefore, the first promise should fail if the second fails.
暂时忘记编程:如果你说的话,它会让事情复杂化,我会答应我不会吃冰淇淋的承诺。不,你只是做出承诺你不会吃冰淇淋。
考虑重新设计您的代码,以便您可以更简单,说,我将做出可以解决或拒绝的承诺(A)。我将另外制定另一个承诺(B),可以独立于A来解决或拒绝。
或者只使用一个承诺,但将代码划分为单独的'then'链,例如
promise.then(function(result) { // First 'then'
console.log(result); // Resolve case
}, function(err) {
console.log(err); // Reject case
}).then(function(val) { // Second 'then'
console.log(val); // Resolve case
});
为了更好地理解,我强烈建议您阅读:http://www.html5rocks.com/en/tutorials/es6/promises/
答案 2 :(得分:0)
我可能会反过来你所拥有的。首先获取值,然后进行处理并返回Promise(假设它是异步的)。
var myPromise = somePromise(someParm)
.then(function (retVal) {
return Promise(function (resolve, reject) {
// Some processing with retVal e.g.
if (retVal > 5) {
resolve(retVal);
} else {
reject('value less than 5');
}
})
})
// Then you can do other stuff
.then(function (val) {
console.log('this value is greater than 5', val);
})
.catch(function (reason) {
console.log(reason); // 'value is less than 5'
});