qml 使用Promise 带参数异步调用2方法 举例
时间: 2023-05-24 11:03:11 浏览: 298
asyncfuture:将QFuture用作Promise对象
A:
假设我们有如下的两个异步函数需要同时调用,其中 `getData` 函数需要传入参数:
```
function getData(param) {
return new Promise(resolve => {
setTimeout(() => {
resolve('参数为:' + param + ',数据');
}, 1000);
});
}
function doSomething() {
return new Promise(resolve => {
setTimeout(() => {
resolve('处理完成');
}, 500);
});
}
```
那么我们可以这样使用 `Promise` 带参数异步调用这两个函数:
```
function callBothAsyncFunctions(param) {
return new Promise(resolve => {
Promise.allSettled([
getData(param),
doSomething()
]).then(results => {
const [dataResult, processResult] = results;
console.log(dataResult.value); // 输出:参数为:abc,数据
console.log(processResult.value); // 输出:处理完成
resolve();
});
});
}
callBothAsyncFunctions('abc').then(() => {
console.log('全部处理完成');
});
```
在上述示例中,我们定义了一个用于同时调用两个函数的函数 `callBothAsyncFunctions`,它接受一个参数 `param`,该参数将传递给 `getData` 函数。
`callBothAsyncFunctions` 函数返回一个 Promise,当两个异步函数都执行成功后,该 Promise 才会 resolved。
Promise.allSettled 方法可以同时调用多个 Promise,当所有 Promise 均完成时,它会以数组形式返回每个 Promise 的结果。在本例中,我们使用了解构赋值,将 `results` 数组中的两个 Promise 结果依次赋值给 `dataResult` 和 `processResult` 变量,然后打印出结果。最后,在 `resolve` 函数中调用了 `callBothAsyncFunctions` 的 Promise,使它 resolved。
阅读全文