Javascript 承诺,回报承诺
我即将对这个问题大发雷霆:我打算将一个PHP应用程序翻译成Angular 6,但是我会在JavaSript ES6中开发这个问题,以便在最终确定的代码之前进行简化。情况如下: 我的用户表是:Javascript 承诺,回报承诺,javascript,mysql,angularjs,es6-promise,Javascript,Mysql,Angularjs,Es6 Promise,我即将对这个问题大发雷霆:我打算将一个PHP应用程序翻译成Angular 6,但是我会在JavaSript ES6中开发这个问题,以便在最终确定的代码之前进行简化。情况如下: 我的用户表是: +-------------------------+-----------------------+------+-----+---------+----------------+ | Field | Type | Nu
+-------------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| ip_address | varchar(45) | NO | | NULL | |
| username | varchar(100) | NO | | NULL | |
| password | varchar(80) | NO | | NULL | |
| salt | varchar(40) | YES | | NULL | |
| email | varchar(254) | NO | UNI | NULL | |
| activation_code | varchar(40) | YES | | NULL | |
| forgotten_password_code | varchar(40) | YES | | NULL | |
| forgotten_password_time | int(11) unsigned | YES | | NULL | |
| remember_code | varchar(40) | YES | | NULL | |
| created_on | int(11) unsigned | NO | | NULL | |
| last_login | int(11) unsigned | YES | | NULL | |
| active | tinyint(1) unsigned | YES | | NULL | |
| first_name | varchar(50) | YES | | NULL | |
| last_name | varchar(50) | YES | | NULL | |
| company | varchar(100) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
+-------------------------+-----------------------+------+-----+---------+----------------+
+-------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| description | varchar(100) | NO | | NULL | |
+-------------+-----------------------+------+-----+---------+----------------+
我的分组表是:
+-------------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| ip_address | varchar(45) | NO | | NULL | |
| username | varchar(100) | NO | | NULL | |
| password | varchar(80) | NO | | NULL | |
| salt | varchar(40) | YES | | NULL | |
| email | varchar(254) | NO | UNI | NULL | |
| activation_code | varchar(40) | YES | | NULL | |
| forgotten_password_code | varchar(40) | YES | | NULL | |
| forgotten_password_time | int(11) unsigned | YES | | NULL | |
| remember_code | varchar(40) | YES | | NULL | |
| created_on | int(11) unsigned | NO | | NULL | |
| last_login | int(11) unsigned | YES | | NULL | |
| active | tinyint(1) unsigned | YES | | NULL | |
| first_name | varchar(50) | YES | | NULL | |
| last_name | varchar(50) | YES | | NULL | |
| company | varchar(100) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
+-------------------------+-----------------------+------+-----+---------+----------------+
+-------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| description | varchar(100) | NO | | NULL | |
+-------------+-----------------------+------+-----+---------+----------------+
我还有一个亲戚,比如:
+----------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------------------+------+-----+---------+----------------+
| id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| user_id | mediumint(8) unsigned | NO | MUL | NULL | |
| group_id | mediumint(8) unsigned | NO | MUL | NULL | |
+----------+-----------------------+------+-----+---------+----------------+
好的,在这种情况下,我希望获得到期用户(在本例中为用户2)所属的所有组
我的JavaScript代码是:
var mysql = require('promise-mysql');
var connection;
var arr = [];
mysql.createConnection({
host: 'host',
user: 'user',
password: 'password',
database: 'database'
}).then(
function (conn) {
connection = conn;
return conn.query('select * from users_groups where user_id=2');
}
).then(
function(value) {
console.log('Initial value : ' + JSON.stringify(value) );
for (let user_group of value) {
console.log('Each value : ' + JSON.stringify(user_group.group_id));
arr.push( connection.query(`select * from groups where id = ${user_group.group_id}`));
}
return arr;
}, function (reason) {
console.log('Rechazo: ' + reason);
}
).then (
function (echo) {
console.log('Echo: ' + JSON.stringify(echo));
connection.end();
}
);
我确实得到了:
Initial value : [{"id":10,"user_id":2,"group_id":1},{"id":11,"user_id":2,"group_id":2}]
Each value : 1
Each value : 2
Echo: [{"isFulfilled":false,"isRejected":false},{"isFulfilled":false,"isRejected":false}]
有人能帮我吗?
提前谢谢 为了使承诺链正常工作,您必须在
中返回承诺,然后调用任何异步操作。在第二次then
调用中,将一系列异步db调用推送到一个数组中。由于返回的是数组而不是承诺,因此下一次then
调用不会not等待所有查询完成。将此数组传递给Promise.all
并返回该数组,您将获得所需的结果
var mysql = require('promise-mysql');
var connection;
var arr = [];
mysql.createConnection({
host: 'host',
user: 'user',
password: 'password',
database: 'database'
}).then(
function (conn) {
connection = conn;
return conn.query('select * from users_groups where user_id=2');
}
).then(
function(value) {
console.log('Initial value : ' + JSON.stringify(value) );
for (let user_group of value) {
console.log('Each value : ' + JSON.stringify(user_group.group_id));
arr.push( connection.query(`select * from groups where id = ${user_group.group_id}`));
}
return Promise.all(arr);
}, function (reason) {
console.log('Rechazo: ' + reason);
}
).then (
function (echo) {
console.log('Echo: ' + JSON.stringify(echo));
connection.end();
}
);
为了让承诺链正常工作,您必须在
调用中返回承诺,然后调用任何异步操作。在第二次then
调用中,将一系列异步db调用推送到一个数组中。由于返回的是数组而不是承诺,因此下一次then
调用不会not等待所有查询完成。将此数组传递给Promise.all
并返回该数组,您将获得所需的结果
var mysql = require('promise-mysql');
var connection;
var arr = [];
mysql.createConnection({
host: 'host',
user: 'user',
password: 'password',
database: 'database'
}).then(
function (conn) {
connection = conn;
return conn.query('select * from users_groups where user_id=2');
}
).then(
function(value) {
console.log('Initial value : ' + JSON.stringify(value) );
for (let user_group of value) {
console.log('Each value : ' + JSON.stringify(user_group.group_id));
arr.push( connection.query(`select * from groups where id = ${user_group.group_id}`));
}
return Promise.all(arr);
}, function (reason) {
console.log('Rechazo: ' + reason);
}
).then (
function (echo) {
console.log('Echo: ' + JSON.stringify(echo));
connection.end();
}
);
代替
return arr
doreturn Promise.all(arr)
代替return arr
doreturn Promise.all(arr)
回答得好。我建议你试试看。回答得好。我建议你试试看。