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);
  }
});