Javascript 所有承诺的同步代码
大家好,我的代码有问题,因为承诺是以异步方式完成的,我需要它们是同步的。所以我有这个函数来返回fullfilled中两个承诺的值Javascript 所有承诺的同步代码,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,大家好,我的代码有问题,因为承诺是以异步方式完成的,我需要它们是同步的。所以我有这个函数来返回fullfilled中两个承诺的值 ServicesController.prototype.uci = function (device, config, path, section, property, value, apply, commit) { createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -
ServicesController.prototype.uci = function (device, config, path, section, property, value, apply, commit) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'inicio');
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'config', config);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'path', path);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'section', section);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'option', property);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'value', value);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'apply', apply);
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'commit', commit);
var values = {};
values[property] = value;
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'values', values);
return Controllers.Ubus.uciRequest('set', {"config": config, "section": section, values}, device)
.then(function (uciData) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'uciData', uciData);
var promises = [];
if (uciData != null) {
createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'depois do if do uciData');
if (commit) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'commit');
var p1 = new Promise(function (resolve, reject) {
Controllers.Ubus.uciRequest('commit', {"config": config}, device)
.then(function (dataCommit) {
if (dataCommit && dataCommit.hasOwnProperty('result') && dataCommit.result[0] == 0) {
createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'commit data', dataCommit);
resolve(dataCommit.result[0]);
} else {
reject("no data");
}
}).catch(function (err) {
createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'error promise commit', err);
});
});
promises.push(p1);
}
if (apply) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'apply');
var p2 = new Promise(function (resolve, reject) {
Controllers.Ubus.fileExec(device.id, "exec", path, "restart")
.then(function (dataApply) {
if (dataApply && dataApply.hasOwnProperty('result') && dataApply.result[0] == 0) {
createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'apply data', dataApply);
resolve(dataApply.result[0]);
} else {
reject("no data");
}
}).catch(function (err) {
createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'error promise apply', err);
});
});
promises.push(p2);
}
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'promises ', promises);
}
}).then(function (promises) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'promises then', promises);
Promise.all(promises).then(function (values) {
createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'promises all', values);
return(values);
}).catch(function (err) {
createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'error promise all', err);
});
}).catch(function (err) {
createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'error then 2', err);
});
}
根据我的日志,我正在输入应用和提交if
现在我收到了这个日志:
[2017-06-08 15:37:39.621] - error: /opt/wscontroller/wscontroller-api/routes/services ServicesController NA uci error promise all {}
任何人都可以给我一些帮助来解决这个问题吗?问题是没有
承诺
或者其他值实际上是从返回
的。然后()
链接到控制器。Ubus.uciRequest()
调用。问题是没有承诺
或者其他值实际上是从返回
的。然后()
链接到Controllers.Ubus.uciRequest()
调用。您必须先在callback中返回promises数组您必须先在callback中返回promises数组promises.push(p1)和promise.push(p2)
的预期结果是什么?createLog()
返回什么?我需要像您理解的那样解析p1和p2?我尝试将p1作为新承诺并解析dataCommit[0]。结果没有更改。。。看到我的代码被更改了吗!promises.push(p1)
和promise.push(p2)
的预期结果是什么?createLog()
返回什么?我需要像您理解的那样解析p1和p2?我尝试将p1作为新承诺并解析dataCommit[0]。结果没有更改。。。看到我的代码被更改了吗!我编辑了我的代码,请参见pls@CatyMatos为什么需要编辑代码?问题是没有返回任何值。然后()
我正在执行Promise.all(promises)。然后(function(values){更新后的代码仍然没有返回中的值。然后()
请参见我编辑的代码请参见pls@CatyMatos为什么需要编辑代码?问题是没有返回值。然后()
我正在执行Promise.all(promises).then(function(values){更新后的代码仍然不会返回中的值。then()
请参见