Javascript 具有promise方法的Wait函数
我想等待构造函数(),它具有由Javascript 具有promise方法的Wait函数,javascript,jquery,html,Javascript,Jquery,Html,我想等待构造函数(),它具有由Promise处理的异步方法 我要做的是在构造函数中等待两个异步方法,然后等待构造函数本身 但是,我的代码显示错误Uncaught(in promise)ReferenceError:resolve未定义 这方面的最佳实践是什么 class MyClass{ constructor(){ var p1 = new Promise(function(resolve, reject){ $.ajax({
Promise处理的异步方法
我要做的是在构造函数中等待两个异步方法,然后等待构造函数本身
但是,我的代码显示错误Uncaught(in promise)ReferenceError:resolve未定义
这方面的最佳实践是什么
class MyClass{
constructor(){
var p1 = new Promise(function(resolve, reject){
$.ajax({
type: "GET",
url: api1
success: function(response) {
console.log(response);
resolve();
}
});
});
var p2 = new Promise(function(resolve, reject){
$.ajax({
type: "GET",
url: api2
success: function(response) {
console.log(response);
resolve();
}
});
});
Promise.all([p1,p2]).then(function(value){
console.log("finish");
resolve(); // this shows error.
});
}
}
$(function() {
var temp = new Promise(function(resolve,reject){
var myClass = new MyClass();
});
temp.then(function (value) {
console.log("finish all");
});
}
构造函数将始终同步运行。除此之外,您不希望使用显式Promise构造反模式,因此您不希望在Promise.all中调用resolve
。Promise.all([p1,p2])
将是在p1
和p2
都已解析时解析的承诺,因此将该属性分配给实例,并调用。然后对该属性调用。改变
Promise.all([p1,p2]).then(function(value){
// ...
});
到
并且,在构造实例时:
$(function() {
const myInstance = new MyClass();
myInstance.apiPromises
.then(function (value) {
console.log("finish all");
})
.catch((error) => {
// handle errors
});
});
(如果您没有使用p1
或p2
中的任何内容调用的resolve
s,最好删除值
参数,因为它不包含任何有用的信息)
$.ajax
已经返回了一个thenable,因此在创建p1
和p2
s时,不需要调用newpromise
:
var p1 = $.ajax({
type: "GET",
url: api1, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});
var p2 = $.ajax({
type: "GET",
url: api2, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});
(使用上述内容也将正确拒绝承诺。发生错误时,所有)非常感谢!!它工作得很好。而且,$.ajax不需要承诺,这对我来说是一个新的提示。也许我会改变我过去作品中的许多观点。。。。
var p1 = $.ajax({
type: "GET",
url: api1, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});
var p2 = $.ajax({
type: "GET",
url: api2, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});