gpt4 book ai didi

javascript - 如何等待javascript promise 返回值后再继续执行?

转载 作者:行者123 更新时间:2023-12-01 02:46:20 24 4
gpt4 key购买 nike

我编写了一个 util 类,它是基于 promise 的 vendor 库的包装器。我的应用程序将调用此类(在应用程序和操作中)来执行某些操作。

我目前正在处理一个场景,在继续下一步之前,我的代码需要知道 Util 类中 Promise 的返回值。我怎样才能做到这一点?

以下是我的代码的树结构:

├── index.html
├── package-lock.json
├── package.json
├── scripts
│   ├── vendor_script.min.js
├── src
│   ├── actions
│   │   └── index.js
│   ├── common
│   │   └── js
│   │   └── WrapperAroundVendorScript_Utils.js
│   ├── components
│   │   └── app.js
│   ├── index.js
│   └── reducers
│   └── index.js
├── style
│   └── style.css
├── webpack.config.js
├── yarn-error.log
└── yarn.lock

这里,vendor_script.min.js是 vendor 提供的JS库,它使用JS promise 来执行各种操作。我编写了一个 util 类(WrapperAroundVendorScript_Utils.js)来抽象出 vendor 库的实现细节。

WrapperAroundVendorScript_Utils.js

let instance = null;

class VendorUtils {

constructor (){

const config = {
some: value,
}

this._vendor = typeof window !== 'undefined' && window.vendor ? window.vendor : require([PATH]);
this._vendor.config = config;
};

static getInstance() {
if(typeof instance == "undefined" || !instance){
instance = new VendorUtils();
}
return instance;
}

doSomething(param1, param2) {
this._vendor.domSomething(param1 + param2);
.then(retVal => {
return {retVal};
});
};

doSomethingElse(param1, param2) {
this._vendor.domSomethingElse(param1 + param2);
.then(retVal => {
return {retVal};
});
};
}

module.exports.VendorUtils = VendorUtils;

app.js

import React, { Component } from 'react';
import {VendorUtils} from '../common/js/VendorUtils';

export default class App extends Component {

clicked(){
let utilsInstance = VendorUtils.getInstance();
let x = utilsInstance.doSomething('a','b');
let y = utilsInstance.doSomethingElse(x,'a');
// call action with values received in previous steps
}

render() {
return (
<div>
<button type='button' onClick={this.clicked}>Click Me!</button>
<button type='button' onClick={this.clicked}>Click Me!</button>
<button type='button' onClick={this.clicked}>Click Me!</button>
</div>
);
}
}

PS:我需要这种同步行为,因为类中有多个子/嵌套/子组件将调用此类通用函数。

最佳答案

这是您想要使用async/await的完美示例

async clicked() {
const utilsInstance = VendorUtils.getInstance();
const x = await utilsInstance.doSomething('a','b');
const y = await utilsInstance.doSomethingElse(x,'a');
...
}

关于javascript - 如何等待javascript promise 返回值后再继续执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47236152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com