围绕anound承诺回报承诺

时间:2016-01-12 23:58:25

标签: javascript es6-promise

鉴于somePromise(param

我想创建另一个承诺,进行一些处理,然后根据somePromise的结果解析/拒绝:

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

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

3 个答案:

答案 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'
    });