最佳实践:Javascript类依赖于异步获取外部数据
我的javascript技能有点过时,所以我想咨询您的最佳实践建议 我想要达到的目标:最佳实践:Javascript类依赖于异步获取外部数据,javascript,node.js,express,asynchronous,Javascript,Node.js,Express,Asynchronous,我的javascript技能有点过时,所以我想咨询您的最佳实践建议 我想要达到的目标: 创建一个类,该类围绕从外部服务获取的JSON进行包装 创建另一个类,作为封装所有网络内容的前一个类的工厂 了解在这种情况下如何处理承诺 这是一份草稿: class DataObject { constructor(json) {...} someMethod() {...} } class DataObjectFactory { constructor() {...} getDataOb
- 创建一个类,该类围绕从外部服务获取的JSON进行包装
- 创建另一个类,作为封装所有网络内容的前一个类的工厂
- 了解在这种情况下如何处理承诺
class DataObject {
constructor(json) {...}
someMethod() {...}
}
class DataObjectFactory {
constructor() {...}
getDataObject(id) {
..fetch(url)..
}
}
myDataObjectFactory.getDataObject(123).then(...)
现在,我可以强制getDataObject()
进行同步操作,但我想了解在这种情况下使用承诺的最佳方式是什么。为了确保DataObject成功地填充了JSON数据,我必须如何组织和编写我的资料
也欢迎链接到有用的howto
谢谢大家! 如果您想直接使用承诺,您可以让getDataObject()返回在解决fetch后解析的承诺。 调用getDataObject().then()时,给出函数或lambda表达式的下一步操作
class DataObjectFactory {
constructor() {...}
getDataObject(id) {
let getDataObjectPromise = new Promise(function(resoveFn) {
fetch(url).then(
resoveFn(
DataObject(response)
)
);
});
return getDataObjectPromise;
}
}
function useDataObject(newDataObject){
// there you can use DataObject
}
myDataObjectFactory.getDataObject(123).then(useDataObject); //use function or lambda expression
如果您想使用自然外观的语法,可以使用async/await,它在surface下使用promise
class DataObjectFactory {
constructor() {...}
async getDataObject(id) {
let json = await fetch(url);
return DataObject(json);
}
}
async function getAndUseDataObject(){
var myDataObject = await myDataObjectFactory.getDataObject(123);
// use myDataObject like in sync function
}
getAndUseDataObject(); //One can't use await outside async function
对于
fetch
及其方法已经提供的功能,实际上没有什么可添加的。但它可能看起来像下面。此代码段使用JSONPlaceholder获取一些数据:
类数据对象{
建造师(obj){
分配(本,obj);
}
toString(){
返回'User${this.userId}${this.completed?'completed:“尚未完成”}任务号${this.id},标记为${this.title}`;
}
}
类DataObjectFactory{
构造函数(){
}
异步getDataObject(id){
let response=等待获取(“https://jsonplaceholder.typicode.com/todos/“+id);
让obj=wait response.json();
返回新的数据对象(obj);
}
}
让myDataObjectFactory=newDataObjectFactory();
getDataObject(123)。然后(myDataObject=>
console.log(myDataObject.toString())
);代码>欢迎来到S.O!是myDataObjectFactory.getDataObject(123)的结果。然后(…)
被DataObject
使用?谢谢!否,它应该生成并返回您正在使用的数据对象(1)。(2) 响应对象与JSON关系不大。