这会有点分散,请原谅我。
首先,假设此代码正确使用了mysql驱动程序API,这是将其包装为与本机promise一起使用的一种方法:
function getLastRecord(name){ return new Promise(function(resolve, reject) { // The Promise constructor should catch any errors thrown on // this tick. Alternately, try/catch and reject(err) on catch. var connection = getMySQL_connection(); var query_str = "SELECt name, " + "FROM records " +"WHERe (name = ?) " + "LIMIT 1 "; var query_var = [name]; connection.query(query_str, query_var, function (err, rows, fields) { // Call reject on error states, // call resolve with results if (err) { return reject(err); } resolve(rows); }); });}getLastRecord('name_record').then(function(rows) { // now you have your rows, you can see if there are <20 of them}).catch((err) => setImmediate(() => { throw err; })); // Throw async to escape the promise chain所以一件事:您仍然有回调。回调只是函数,您可以使用将来选择的参数将其传递给将来的某个点。因此,中的函数参数
xs.map(fn),
(err,result)在node中看到的函数以及promise结果和错误处理程序都是回调。人们将一种特定的回调称为“回调”,这在某种程度上使人感到困惑,这种回调
(err,result)在节点核心中以“连续传递样式”的形式使用,有时被不喜欢它们的人称为“ nodebacks”。
到目前为止,至少(异步/等待最终会出现),无论是否采用Promise,您都几乎陷入了回调。
另外,我会注意到,promise不会立即生效,显然在这里很有用,因为您仍有回调。当您将它们与
Promise.all并保证累加器相结合时,承诺才真正闪耀
Array.prototype.reduce。但他们
做的 光泽有时,他们 是 值得学习的。



