<script>
function solution() {
let pro = new Promise((res, rej) => {
let arr = [];
$(document).ready(function () {
arr.push(1);
res(arr);
}).then((response) => {
console.log(response);
});
});
}
solution();
</script>
为什么在promise中包装$(document).ready()会生成Uncaught(在promise中)TypeError:$(...)。ready(...)。那么是不是函数错误?我确信$(document).ready()可以独立工作。
答案 0 :(得分:0)
请参阅jQuery中的$(document).ready(...)
以及任何其他事件处理程序附件函数,returns a jQuery object - 这不是Promise(并且没有{\ n} {分配了{1}}方法)。你真正需要的是转移parens:
then
&#13;
function solution() {
let pro = new Promise((res, rej) => {
let arr = [];
$(document).ready(function() {
arr.push(1);
res(arr);
});
}).then(response => console.log(response));
}
solution();
&#13;
...以便在您的新Promise上调用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
(在jQuery代码将DOM视为.then()
后解析)。
但不清楚,为什么需要在附加处理程序的同一函数中直接使用ready
。让这个函数只做一个事情可能是一个更好的主意 - 只要文档准备好就返回一个Promise。在这种情况下,您可以为其附加多个处理程序:
then
...然后用它来附加几个处理程序:
function whenDomIsReady() {
const someInitialData = ['Spanish Inquisition']; // nobody expects!
return new Promise(res => {
$(document).ready(function() {
res(someInitialData);
});
});
}
实际上(感谢@KevinB提到它),这个问题已经解决了 - 在jQuery本身,$.ready,自1.8以来可用:
whenDomIsReady().then(console.log);
答案 1 :(得分:-1)
<script>
function solution() {
let pro = new Promise((res, rej) => {
let arr = [];
$(document).ready(function () {
arr.push(1);
res(arr);
})
})
.then((response) => console.log(response));
}
solution();
</script>
&#13;
你当时在错误的地方。它在承诺中被召唤。它应该紧随其后。