在尝试删除厄运金字塔时,无法将数据传递给下一个承诺

时间:2016-06-10 13:02:42

标签: javascript node.js promise q

目前我正在使用Node,Express和Q库进行承诺。它工作正常,但我在下面插入每个承诺得到一个可怕的厄运金字塔。

我已经检查过我可以通过以下结构避免这种情况:

function validateInputFields(formName,req){
    var deferred = Q.defer()
      , connection  = req.conn || deferred.resolve(new Error('Internal error with connection.'));

    Services.data.splitBody(req.body)
    .then((arr) => {
        var inputFields = arr[0]
          , inputValues = arr[1];

        return Services.form.getFields(connection,formName)
    })
    .then((formKeys)            => { return Services.form.getMandatories(formKeys) })
    .then((dbMandatories)       => { return Services.form.allMandatoriesAreProvided(dbMandatories,inputFields) })
    .then((mandatoriesProvided) => { return Services.form.allFieldsBelongToform(formKeys,inputFields) })
    .then(()                    => {
        Services.form.correctFieldsType(inputFields,inputValues,formKeys)
        deferred.resolve();          
    })
    .catch((err) => next(err));

    return deferred.promise;
}

这里的问题是我无法在以下承诺中访问inputFields之类的某些变量,而在嵌套时我能够做到这一点。

Other post建议尽管.spread使用.then,但它不起作用(即使承诺停止工作)。

有没有一种聪明的方法可以解决这个问题?

谢谢!

0 个答案:

没有答案