Javascript 使用babel时,使用多个同时的jQuery请求获取AJAX响应数据时出现问题
在我的应用程序中,我使用jQuery 2.2.2同时发送几个AJAXJavascript 使用babel时,使用多个同时的jQuery请求获取AJAX响应数据时出现问题,javascript,jquery,ajax,babeljs,Javascript,Jquery,Ajax,Babeljs,在我的应用程序中,我使用jQuery 2.2.2同时发送几个AJAXpost请求,并构建一个“主”承诺,在所有请求完成时解决,如下所示: let promises = [] //items is 1 or more in length _.forEach(items, (item) => { promises.push( $.ajax({ url: 'some url', method: 'post', data: item })
post
请求,并构建一个“主”承诺,在所有请求完成时解决,如下所示:
let promises = []
//items is 1 or more in length
_.forEach(items, (item) => {
promises.push(
$.ajax({
url: 'some url',
method: 'post',
data: item
})
)
})
let masterPromise = $.when.apply($, promises)
masterPromise.done(() => {
let result = []
let json
if (promises.length === 1) {
json = arguments[0]
//do something with json
} else {
$.each(arguments, function (index, responseData) {
json = responseData[0]
result.push(json)
})
//do something with result: an array of json responses
}
})
return masterPromise
这里有几个问题:
- 对回调函数使用
表示法时,脚本工作正常function(){}
- 当使用
表示法时,回调中的()=>{}
从不包含来自请求的实际响应数据。它包含从标题(my参数
变量)发送的数据数组item
masterPromise.done((arg1, arg2) => { /*arg1 and arg2 are the two first ajax requests, but arguments is the sent data*/ })
但我无法使用参数获取它们。我使用babel浏览器作为传输工具,现在我怀疑这可能与此有关。
EDIT2:我稍微修改了我的问题,因为我发现回调中的
()=>{}
符号和babel`的传输存在问题。这是因为您在这里使用了箭头函数:
.done(() => {
// ...
})
这并没有填充。如果您真的想使用它(您可能不应该使用),则使用普通功能:
.done(function() {
console.log(arguments.length)
})
当您使用babel transpiler时,您应该能够使用rest参数语法
(…args)=>{}
——总的来说,使用babel您应该能够将代码简化为
let promises = items.map((item) =>
$.ajax({
url: 'some url',
method: 'post',
data: item
})
);
let masterPromise = $.when.apply($, promises);
masterPromise.done((...args) => {
let result;
let json;
if (args.length === 1) {
json = args[0]; // shouldn't this be args[0][0] ?
//do something with json
} else {
result = args.map(responseData => responseData[0]);
//do something with result: an array of json responses
}
});
return masterPromise;
我认为
$.when.apply($,promissions)
应该是$.when.apply($.when,promissions)
@JonathanGray-不,这是former@JaromandaX你是对的,出于某种原因,在我的脑海中,我正在阅读。应用作为被调用的方法(当然是。当时)。我不知道为什么我会这样想,因为我知道.apply
在做什么。放屁。我想我需要更多的睡眠。哈哈,谢谢!几分钟前我自己发现了这一点并编辑了我的问题,但你证实了我的担心。我不能在这里使用箭头符号。所以问题不是来自巴别塔,而是来自箭头符号。出于某种原因,我认为它们是等价的(除了使用箭头函数时绑定的this
),您也不需要箭头函数,正常函数在这里也很完美。另一方面,我也不会使用参数。Rest参数对你有用。是的,我使用了arrow函数,因为我需要绑定“this”(在我的示例中没有显示),而且我很懒。你如何继续不使用arguments变量?如果你使用的是babelmasterPromise.done((…args)=>{
then$。每个(args等
我没有看到您使用这个,所以我假设您不需要箭头函数。当然,否则。使用rest参数请参见上面的注释。