-1
과 Node.js를에 비동기 루프를 만드는 것은 내가 할 노력하고있어입니다 : (위 선택은 SQL 여기
- 시작을 루핑 (10 배)
- 선택 SQL에 1 개 레지스터를 반환 한 경우 '실행하는'레코드가 null의 경우
- '실행'에 상태를 '실행'
- 는 SQL 갱신) null의 경우, 나는이 결과는 초기 SQL 기록에 업데이트됩니다
- 일부 데이터를 API를 액세스하고 얻을 (세트 실행 = '확인')
- 끝 루프 (처음부터 다시 시작)
문제는 node.js가 다시 시작을 기다리지 않고 동시에 모든 것을 수행한다는 것입니다. 그렇게하면 'running'은 항상 null입니다.
var express = require('express');
var app = express();
var c_MyApi = require('./controller/call_MyApi');
var mongo = require('./controller/crud_mongo');
var c_email = require('./controller/api_email_verify');
var c_sql = require('./controller/consulta_sql');
var MyLink = '',
id = 0;
for(var i = 0 ; i < 10 ; i++){
c_sql.busca().then(function(res) {
MyLink = res[0].MyLink;
id = res[0].id;
c_sql.marca(id).then(
c_MyApi.busca(MyLink, function(a) {
if (a == 0) {
c_sql.atualiza(id, 'sem_email', 's/e');
}
if (a == 1) {
c_sql.atualiza(id, 'link_errado', 'l/e');
} else {
for (var i = 0; i < a.length; i++) {
var email = a[i].address;
c_email.busca(email, function(e_valid) {
c_sql.atualiza(id, email, e_valid)
})
}
}
})
)
})
}
}
//consulta_sql.js
var sql = require("seriate");
var search = function() {
var exec = 'select top 1 MyLink, id from sys_robo_fila where done is null';
sql.setDefaultConfig(config);
return sql.execute({
query: exec
});
}
var usado = function(id) {
var exec = "update sys_robo_fila set done = 'r' where id = " + id + "";
sql.setDefaultConfig(config);
return sql.execute({
query: exec
});
}
var update = function(id, email, valid) {
var exec = "update sys_robo_fila set email = '" + email + "' , validacao = '" + valid + "' , done = 'ok' where id = " + id + "";
sql.setDefaultConfig(config);
return sql.execute({
query: exec
});
}
module.exports = {
busca: search,
atualiza: update,
marca: usado
}
모든 요망?
c_sql.busca()
에 대한 호출은 그들이 실제로 단지 매우 빠르게 실행 (동시에 실행하는 것,하지만 이유입니다,라고 즉시
Promise
를 반환하고
then()
전에 다음 루프로 계속