我有嵌套引起问题的回调。我想改变承诺,但我不确定如何做到这一点。
我首先得到一个输出数组
require('abcd').open(cnnectionString, function(er, conn) {
// I get list back from following query
conn.query('select first 10 name, phone from........', function(err, result) {
if(err) {
} else {
// for each name and phone I call another query
for(i = 0; i <= result.length; i++) {
conn.query('select address from......where name=result[i].name',
function(error, result1) {
// I call third query based on data from second query
conn.query('select acct from .......where ', function(err, result2) {
console.log(result2)
})
})
})
})
通过这种方法,由于异步,我得到了各种糟糕的结果。请让我知道如何将其改为承诺。
答案 0 :(得分:1)
您可以使用Promise.all()
实现此目的,请稍后查看并尝试一下:
var connection;
var promises = [];
require('abcd').open(cnnectionString)
.then(function(conn) {
connection = conn;
return connection.query('select first 10 name, phone from........');
})
.then(function(result) {
for (i=0; i<=result.length; i++) {
var promise = connection.query('select address from......where name=result[i].name');
promises.push(promise);
}
})
.catch(function(err) {
console.log(err, 'error');
});
Promise.all(promises).then(function(result) {
console.log(result, 'result');
});
答案 1 :(得分:0)
以下代码可以帮助您了解如何在代码中将回调更改为承诺
var name = require('abcd');
name.open(connectionString)
.then(function(conn) {
//query
})
.then(function(other) {
})
});
你可以通过这些链接了解nodejs中的promises,也有一些例子 https://developer.ibm.com/node/2016/08/24/promises-in-node-js-an-alternative-to-callbacks/ https://www.guru99.com/node-js-promise-generator-event.html