如何在nodejs的编码中使用promise链接

exports.updateMyData = function (data) { var resultPromise = Q.defer(); var errorResponse = function (err) { resultPromise.reject(err); }; findById(data.id).then(function (mydata) { if (!mydata) { errorResponse("No item found to update"); } mydata.updateAttributes(data).then(function (mydata) { resultPromise.resolve(mydata) }, errorResponse) }, errorResponse); return resultPromise.promise; }; 

上面的编码工作正常,但我想用上述编码的承诺链接。 请帮我怎么用?

你可以这样做:

 exports.updateMyData = function (data) { return findById(data.id).then(function (mydata) { if (!mydata) { throw new Error("No item found to update"); } return mydata.updateAttributes(data); }); }; 

或者像这样链接:

 exports.updateMyData = function (data) { return findById(data.id).then(function (mydata) { if (!mydata) { throw new Error("No item found to update"); } return mydata; }).then(function(data) { return mydata.updateAttributes(data); }); }; 

注意这两个选项如何返回内部的承诺,而不是创造一个新的承诺。 而且, .then()处理程序中的throw将自动拒绝该承诺。

创build一个像你原来的代码一样的新的承诺,当你可以返回已经被认为是承诺的反模式的时候 ,应该避免。