gpt4 book ai didi

javascript - 使用回调链接类方法?

转载 作者:搜寻专家 更新时间:2023-10-31 23:08:49 27 4
gpt4 key购买 nike

在 Node.js 中,如何将类方法链接在一起,何时最好使用回调?

在我使用 PHP 的日子里,我通常会做这样的事情:

class MyClass {

function get() {
// fetch some data from an API endpoint
return this;
}

function set(property, value) {
// Set the property to some value on the object
return this;
}

function save() {
// Save the data to database
return this;
}
}

$myObject = new MyClass();
$myObject->set('something','taco')->save();

这种非常常见的 OO 方法允许您根据需要多次将方法链接在一起。

在使用 Node.js 时,您还能以某种方式进行类似于此的链接吗?还是您只是陷入了回调 hell ?每一个“链”都是一个嵌套的回调?

或者我是否只需要将我的脚本包装在 Promises 中?

new Promise(function(resolve, reject){
var myObject = new MyClass();
myObject.set('something','taco');
resolve(myObject);
}).then(function(myObject){
myObject.save();
});

你应该这样做吗?有没有什么办法可以将它更深入地融入我的类,这样我就不必每次都把它包装在 promise 中?我见过一些图书馆有一种“ promise 模式”,比如 https://github.com/sindresorhus/got但在查看代码后,我仍然不确定他们是如何做到的。

最佳答案

您使用 return this 链接以进行同步调用。

您使用 Promise 或异步调用的回调进行链接。

class MyClass {

get() {
return new Promise((resolve, reject)=> {
// Make Request and call resolve( result ) or reject( err )
});
}

set( property, value ) {
this[property] = value;
return this;
}

save() {
return new Promise((resolve, reject)=> {
// Make Request and call resolve( result ) or reject( err )
});
}
}

var myObject = new MyClass();

myObject
.set('something', 'taco')
.save()
// resolve handler
.then(( saveResult )=> {
console.log( saveResult );
return myObject.get();
})
// resolve handler
.then(( getResult )=> {
console.log( getResult );
})
// reject handler
.catch(( error )=> { });

关于javascript - 使用回调链接类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224439/

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