【发布时间】:2023-06-23 06:51:01
【问题描述】:
我正在尝试解决以下挑战,我必须编写一个函数triggerActions,将回调传递给processAction,并产生输出:
"Process Action 1"
"Process Action 2"
...
"Process Action n"
这里是提供的功能:
function processAction(i, callback) {
setTimeout(function() {
callback("Processed Action " + i);
}, Math.random()*1000);
}
函数编码:
function triggerActions(count) {
}
请注意,processAction 的代码不能更改。我正在考虑使用 Promise,但我不确定如何使用。我相信 setTimeout 实际上是同步的,所以我不知道 async/await 是否可以工作。
我的尝试:
triggerActions = count => {
let promises = [];
for(let i=1; i<=count; i++) {
promises.push(new Promise( (resolve, reject) => processAction(i, str => resolve(str))));
}
let results = []
promises.forEach( promise => Promise.resolve(promise).then( async res => results.push(await res)));
return results;
}
【问题讨论】:
-
setTimeout 实际上是a同步的——你试过任何代码吗,你希望有人为你解决这个挑战吗?跨度>
-
promisify
processAction,然后async/´await` 就可以了。 -
@JaromandaX 我刚刚用我的代码编辑了我的帖子。
-
您希望它按顺序打印(即 1、2、3、4..n)还是它们的执行顺序(即随机顺序)?
标签: javascript promise async-await settimeout