【发布时间】:2017-02-18 17:13:24
【问题描述】:
我想在通过某些条件解决后停止 Promise 链。下面的代码可能有助于理解我在说什么。
function update(id, data) {
return new Promise((resolve, reject) => {
let conn;
pool.get()
.then((db) => {
conn = db;
if(Object.keys(data).length === 0) {
return resolve({ updated: 0 });
}
else {
return generateHash(data.password);
}
})
.then((hash) => {
conn.query("UPDATE ... ", (err, queryResult) => {
if(err) {
throw err;
}
resolve({ updated: queryResult.affectedRows });
});
})
.catch((err) => { ... })
});
}
请注意,pool.get() 是承诺包装的 API,用于从我制作的 MySQL 模块获取连接池。
我想要做的是更新用户数据。为了节省服务器资源,如果没有数据要更新,我避免更新(Object.keys(data).length === 0)。
当我尝试这段代码时,即使没有要更新的数据,第二次 then(update db) 也总是发生!
我读了this post,但没有用。为什么当我调用“return resolve();”时承诺链没有停止?以及如何正确停止它?我真的很喜欢使用 Promises,但有时,这种事情会让我发疯。非常感谢帮助我解决这个问题。谢谢!
附:反正我用的是node v6.2.2。
【问题讨论】:
-
首先,您使用的是 Promise 构造函数反模式......其次,在链的一部分中解析保证会落到下一个 .then - 这就是 Promise 链的工作原理!
-
你可以在这里得到帮助stackoverflow.com/questions/20714460/…
-
为什么要等到在你
pool.get之后再检查传入的data是否没有密钥? -
@torazaburo - 这将是下一个
hash回调中hash的值 -
虽然...
hash好像根本没用过
标签: javascript node.js promise