javascript - 为什么这个 promise 不起作用?

标签 javascript jquery ajax promise

我尝试在下面的示例中使用 Promise。我正在学习 promise ,但我的第一个例子不起作用。它打印出“Promise did not work”。

现在,我知道 hide() 函数需要 400 毫秒才能为 foo 赋值。这就是为什么 ajax 调用无法获取数据的原因。所以这是行不通的。

我可以通过在 hide 回调中调用 ajax 来解决这个问题,但我想使用 Promise 来解决它(我想这就是使用 Promise 的原因?)。

有什么问题或者这不是 promise 的目的吗?

这是我的代码:

var foo;
    var res;
    var Prom;
    $("button").click(function(){
        Prom = new Promise(function(resolve, reject){
            $("p").hide(function(){
                foo="YOLO";
            });
            $.ajax({
                url: 'api.php',
                type: 'post',
                data: 'name='+foo,
                success: function(result){
                    res=result;
                    resolve(res);
                },
                error: function(){
                    reject("Promise didn't work");
                }
            });

        });
        Prom.then(function(result) {
          console.log("The PHP response is: ", result);
        }, function(err) {
          console.log(err); // Error: "It broke"
        });
    });
});

最佳答案

您只需要为 hide 函数创建一个 promise,而您是为整个代码块创建一个 promise

试试这个

var foo;
    var res;
    var Prom;
    $("button").click(function(){
        Prom = new Promise(function(resolve, reject){
            $("p").hide(function(){
                foo="YOLO";
                resolve(true);
            });

        });
        Prom.then(function() {
           //once hidden trigger ajax
           $.ajax({
                url: 'api.php',
                type: 'post',
                data: 'name='+foo,
                success: function(result){
                    res=result;
                    // ajax success
                },
                error: function(){
                    // ajax error
                }
            });

        }, function(err) {
          console.log(err); // Error: "It broke"
        });
    });
});

关于javascript - 为什么这个 promise 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650673/

相关文章:

javascript - 无法获取Ajax调用的返回

javascript - 如何在 XMLhttp Post 请求中传递多个文件值

javascript - window.matchMedia 在 Safari 中不起作用

javascript - 当 jquery 添加父类时,如何更改子类的字体颜色?

javascript - 如何使用 Angularjs 制作级联下拉菜单?

jQuery AJAX 参数未传递给 MVC

javascript - 在javascript中将字符串编码为utf-16到base64

javascript - 如何让 javascript/html5 按钮返回上一页? (浏览器/PhoneGap)

javascript - 加载动画出现在滚动条上方

python - 使用 Django 和 AJAX 的动态 HTML 页面的最小示例