Joe*_*ris 2 javascript jquery promise
我是 JavaScript 新手。我有一系列用于使用 $.getJSON 进行异步 Ajax 调用的承诺。承诺的数量可能会有所不同。所以为了解决它们,我正在使用
$.when.apply($, promises).done(function(data) {
Run Code Online (Sandbox Code Playgroud)
我正在执行 .apply ,因为我不知道有多少个承诺,所以我给它一个承诺数组。我遇到的问题是数据变量仅返回第一个承诺的数据。如果我有两个承诺,我就能做到
$.when.apply($, promises).done(function(firstData, secondData) {
Run Code Online (Sandbox Code Playgroud)
但由于 Promise 的数量未知,我无法为 中的回调函数设置正确的参数.done()。.done()如果可能的话,我想获取一个包含回调中每个 Ajax 调用的已解析数据的数组
这就是扩展语法可以派上用场的地方。
尝试这样的事情
$.when(...promises).done((...results) => {
// results is an array
})
Run Code Online (Sandbox Code Playgroud)
这是由
将promises数组视为单个函数参数
$.when(promises[0], promises[1], ..., promises[promises.length - 1])
Run Code Online (Sandbox Code Playgroud)
将回调函数的各个参数组合.done()到一个数组中
为了完整起见,这实际上是您可能不需要 jQuery 的情况之一。现代浏览器支持Fetch和Promise.all作为$.when和的很好的普通 JS 替代品$.ajax
const getJson = async (url) => {
const res = await fetch(url)
if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`)
return res.json()
}
Promise.all([ getJson(url1), getJson(url2) ]).then(results => {
// results is an array
})
Run Code Online (Sandbox Code Playgroud)
如果您是那些仍然需要支持 Internet Exploder Explorer 的可怜而不幸的人之一,您可以使用apply()参数对象
$.when.apply($, promises).done(function() {
var results = arguments
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |