繁体   English   中英

将方法作为参数传递并在对象上使用该方法(Javascript)

[英]Pass method as parameter and use that method on an object (Javascript)

我需要一个接收方法的 javascript 函数,并在函数内部创建的对象上调用该方法。

const callMethod = myMethod => {
    someObject.myMethod();
}

我需要这个,因为我想创建一个通过 fetch 发出 HTTP 请求的函数,并指定在从 fetch 获取响应后调用哪个方法,其中选项是:.json()、.text()、.blob( )、.formData() 或 .arrayBuffer()

这是我的代码:

const sendPost = (url, bodyObj) => {
    return new Promise(async (resolve, reject) => {
        try {
            const settings = {
                method: "POST",
                headers: {"Content-Type":"application/json"},
                body: JSON.stringify(bodyObj)
            }
            let req = await fetch(url, settings);
            
            // Here I'm forcing the .json() method, I want it to be able to choose between .json(), .text(), etc. when calling this function:
            let res = await req.json();
            
            return resolve(res);
        } catch (e) {
            return reject(e);
        }
    });
}

我已经尝试过了,但是没有用:

const sendPost = (url, bodyObj, func) => {
    // ...
    let req = await fetch(url, settings);
    let res = await req.func();
    // ...
}

sendPost("some url", {some object}, Response.json); // TypeError: req.func is not a function

我认为最简单的方法是传递一个带有我要使用的方法名称的字符串,然后使用条件决定我要调用哪个方法。 但我想要更健壮的东西,它允许将指针传递给实际方法,因为字符串的内容可能拼写错误。

有几种方法可以做到这一点。

您编写它的方式,如果您要传入一个字符串( "json" ),那么您可以这样做:

let response = await sendPost(..., "json");
    let res = await req[func]();

这会找到名称与func中找到的字符串匹配的成员。

您还可以使用回调

let json = await sendPost(..., response => response.json());
    let res = await func(req);

但在那之后,您在辅助函数中唯一要做的就是解决错误并返回结果。 让你的辅助函数返回一个带有响应的 Promise 可能更有意义。

let response = await sendPost(...);
let json = response.json();
    let res = await fetch(url, settings);
    return res;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM