return 围绕承诺的承诺

return a promise around anound promise

给定一些承诺(参数

我想创建另一个 promise,它将进行一些处理,然后 resolve/reject 基于 somePromise 的结果:

function wrapPromise() {
    return new Promise(function(resolve, reject) {
        // some processing
        somePromise(someParam).then(function() { resolve(); },  function(err) { reject(err); });
    });
}

这是正确的方法还是有更短的语法?

不需要额外的承诺。只需进行处理,然后 return 承诺。

function wrapPromise() {
    // some processing
    return somePromise(someParam);
}

我可能会做相反的事情。首先获取值,然后进行处理和 return 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'
    });

你的要求听起来像 I will make a promise to make a promise. And, therefore, the first promise should fail if the second fails.

暂时忘掉编程:如果你说,这只会让事情变得复杂,我会承诺我不会吃冰淇淋。不,你就答应你不吃冰淇淋吧

考虑 re-designing 你的代码,这样你可以让它更简单,说,我会做出一个可以解决或拒绝的承诺 (A)。我将做出另一个单独的承诺 (B),它可以独立于 A 解决或拒绝。

或者只使用一个 promise 但将代码分成单独的 '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/