【发布时间】:2014-08-13 05:34:47
【问题描述】:
我是 Node.js 的新手。我想链接两个承诺。当第一个 Promise 失败时,不应执行第二个 Promise。但是当第一个承诺失败时,我下面的代码总是执行第二个承诺。
function genQueryPromise(query, parameters) {
var deferred = Q.defer();
dbClient.executeAsPrepared(query, parameters,
function(err) {
if (err) {
console.log(
'error in query: ' + query + ", parameters: " + parameters);
deferred.reject(new Error(err));
} else {
console.log("Query succeeded: " + query);
deferred.resolve();
}
}
);
return deferred.promise;
}
var timeUuid = cql.types.timeuuid();
genQueryPromise(
'INSERT INTO points_statement ' +
'(user_id, statement_id, points_change, time_updated, note) ' +
'VALUES (?, ?, ?, dateof(now()), ?)',
["mytest8",
timeUuid,
220,//{value: pointsChange, hint: cql.types.dataTypes.bigint},
"test"]
)
.then(genQueryPromise(
'UPDATE user_points SET points = points + ? WHERE user_id = ?',
[{value: 220, hint: cql.types.dataTypes.bigint}, "mytest8"]
))
.fail(function (error) {
console.log("db error " + error);
});
输出如下:
error in query: INSERT INTO points_statement (user_id, statement_id, points_change, time_updated, note) VALUES (?, ?, ?, dateof(now()), ?), parameters: mytest8,b5835850-2266-11e4-a871-f1a82b5a7753,220,test
db error Error: ResponseError: Expected 8 or 0 byte long (4)
Query succeeded: UPDATE user_points SET points = points + ? WHERE user_id = ?
你可以看到,即使第一个 promise 失败,第二个 promise 也被执行了。我做错了什么?谢谢。
【问题讨论】:
标签: javascript node.js promise q