javascript - 如何将内部函数值作为参数传递给其回调

标签 javascript oop

很抱歉,我不知道确切的措辞,所以请耐心等待。我想做的事情与我们对事件监听器所做的事情是一样的:

foo.addEventListener('click', function(event) {
    console.log(event.target)
})

通过上面的示例,我可以使用匿名回调函数访问事件实例。就我而言,我有这个简单的功能:

function post_rqst({ url, data = '', callback }) {
    let request = new XMLHttpRequest();
    request.open("POST", url, true);
    request.onload = function() {
        callback()
    }
    request.send(data)
}

现在,当我调用 post_rqst() 时,我希望能够访问回调定义中的 request 实例,如下所示:

post_rqst({
    url: 'foo.com/bar/',
    data: '[x,y,z]',
    callback: function(request) {
        if (request.status === 200) {
            console.log('done!')
        }
    }
})

我是一个 javascript 新手,我不知道我不知道什么。感谢您提前的指导。

最佳答案

您可以在调用callback时传递该request实例,而不是:

function post_rqst({ url, data = '', callback }) {
    let request = new XMLHttpRequest();
    request.open("POST", url, true);
    request.onload = function() {
        callback();
    };
    request.send(data);
}

你会:

function post_rqst({ url, data = '', callback }) {
    let request = new XMLHttpRequest();
    request.open("POST", url, true);
    request.onload = function() {
        callback(request);
    };
    request.send(data);
}

在这里您可以看到使用 setTimeout 来伪造该请求的实际情况:

function fakePost({ url, data = '', callback }) {
    const request = { url, data, method: 'POST' };
    
    setTimeout(() => {
      callback(request);
    }, 1000);
}

fakePost({
  url: 'https://stackoverflow.com/',
  data: 'foobar',
  origin: 'https://stackoverflow.com/',
  callback: (req) => {
    console.log('Callback received req =', req);
  },
});

关于javascript - 如何将内部函数值作为参数传递给其回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61720073/

相关文章:

Java 增量/减量运算符 - 它们的行为方式,功能是什么?

javascript - Facebook JavaScript SDK - getLoginStatus 始终返回未知

javascript - PHP 复选框即使未选中也会发布

c++ - 我应该如何将对象传递给类以检查碰撞?

c# - 限制方法中泛型类型的目的是什么?

java - 在设计类似记录器的类时处理条件语句?

javascript 输出不显示

javascript - dropkick 回调问题

javascript - 想知道 html 表单在 firefox 中的行为吗?

oop - 单一职责原则在 OOP 中有效吗?