0

我无法在 javascript 中实现 Promise。

这是我要实现 Promise 的 js 文件的片段。

var promiseToGetUsage = new Promise(function(resolve) {
    setTimeout(function() {
        $.getJSON('../usageService/resources/webservice/getUsageDetails',
            function(data) {
                console.log(data);
            });
    }, 1000);
});

var promiseToGetCompute = new Promise(function(resolve) {
    setTimeout(function() {
        $.getJSON('../usageService/resources/webservice/getComputeDetails', function(data) {
            console.log(data);
        });
    }, 1000);
});

Promise.all([promiseToGetUsage, promiseToGetCompute]).then(function(value) {
    self.isLoading(false);
    self.isUsageVisible(true);
    self.isComputeVisible(true);
});

在这里我不明白两件事。

  • i) netbeans 检查器说“未声明全局变量“Promise””,而我认为它是内置的 js 函数
  • ii) 我对 (i) 做了一些研究,并在 HTML 的 script 标签中添加了以下内容

    src="//cdn.jsdelivr.net/bluebird/3.5.0/bluebird.js"

现在当我调试时,它首先进入 Promise.all,但是当 web 服务完成时,它不会再次调用 Promise.all!

**********************************回答*************** *************************

感谢Benjamin Gruenbaum在评论中指出正确的方向,

解决方法,就是直接调用Promise的all方法中的$.getJson

    Promise.all([
    $.getJSON('../usageService/resources/webservice/getUsageDetails',
                function (data)
                {
                    console.log(data);
                }), 
    $.getJSON('../usageService/resources/webservice/getComputeDetails',
                function (data)
                {
                    console.log(data);
                })
]).then(function(value) {
        self.isLoading(false);
        self.isUsageVisible(true);
        self.isComputeVisible(true);
});
4

0 回答 0