【发布时间】:2018-10-30 16:08:18
【问题描述】:
所以我写了关于 promise 的 javascript。我在这样的 for 循环中做出了两个承诺:
for(let i=0; i<globalName.length; i++ ){
let debug = globalName[i];
var promise1 = new Promise(function(resolve,reject){
var j = searchStart(startT,debug);
resolve(j)
}).then(function(result){
sxx = result;
});
var promise2 = new Promise(function(resolve,reject){
var k = searchEnd(endT,debug);
resolve(k);
}).then (function(result){
syy = result;
});
Promise.all([promise1, promise2]).then(function(values) {
let localed = [];
entry[i] = sxx;
exit[i] = syy;
localed.push({
"name" : debug,
"first" : entry[i],
"last" : exit[i]
});
xtable.rows.add(localed).draw();
});
}
在每个promise中,我调用函数searchStart(startT,debug)和searchEnd(endT,debug),在每个函数中,我还编写了从API返回值的promise脚本(准备从设备调用API,当我调用它时,返回JSON数据)。 JSON 数据工作正常,我可以使用我的函数访问它并返回一些预期值。
使用Promise.all 当我的函数返回值时,我将数据写入DataTables 提供的表中。但当然,因为函数在上述两个 promise 解决时运行,所以它只能将每一行数据写入我的表。
现在,我想问的是,我是否可以设法先写入所有数据,然后在数据完成后调用其他函数写入表?
【问题讨论】:
-
是的,将每个 promise1 和 promise2 保存在一个数组中......但是你为什么要使用 promise,因为似乎没有任何异步发生
-
@bravo 实际上是调用 API 的函数,它返回完成任务所需的不同时间,因为它在 JSON 对象中包含大量数据,所以我认为我应该使用承诺来等待每个调用进度
-
如果
searchStart和searchEnd是异步的,你就做错了——你不是在等待它们完成,你只是在解决它们返回的任何问题......哦...他们返回一个承诺?那么就不需要 Promise 构造函数了
标签: javascript promise