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;
};
以上编码工作正常,但我想使用promise链接进行上述编码。请帮我怎么用?
答案 0 :(得分:2)
你可以这样做:
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);
});
};
请注意这两个选项如何返回内部承诺而不是创建新承诺。此外,throw
处理程序中的.then()
将自动拒绝该承诺。
像原始代码一样创建一个新的承诺,当你可以返回已经拥有的代码时,它被认为是promise anti-pattern,应该避免使用。