我想学习有关承诺的链接,我尝试按顺序从1到3调用以下函数,目前它没有工作,所以我在这里缺少什么?
$(function () {
    function doSomething() {
        return new Promise(function (resolve) {
            var value = 1;
            resolve(value);
        });
    }
    function doSomething2(){
        return 2;
    };
    function doSomething3(){
        return 3;
    };
    doSomething().then(function (firstResult) {
        var result = "first result " + firstResult;
        alert(result);
    })doSomething2.then(function (secondResult) {
        var secReslut = "second result " + secondResult;
       return alert(secReslut);
    })()doSomething2.then(function (tr)
    {
      alert(tr)
    });
});
当你调用.then一个promise时,它会返回一个新的promise,它会从你返回的值中解析出来.then.
因此,在您的示例中链接承诺的正确方法是:
doSomething().then(function(firstResult){
     alert(firstResult);
     return doSomething2(); // this could also return a promise over an async value
}).then(function(secondResult){
     alert(secondResult); // alerts 2
     return doSomething3();  
}).then(function(thirdResult){
     alert(result(3);
});
保证链接起作用的原因在于它是如何.then工作的,它作为一个函数的签名有点复杂,但是当你掌握它时才有意义:
Promise<A> -> (A -> (Promise<B> | B)) -> Promise<B>
这看起来很复杂,但让我们分析一下:
this).在我们的情况下,承诺doSomething返回.then会在我们将要解决的价值上返回一个承诺- 这就是链接发生的原因.调用.then它 - 我们提供了一个函数,它接受1作为参数并返回2.所以我们有1  - > 2.这返回了对值2的承诺.JS中的一个承诺是对链接本身的抽象.像其他同类产品一样 - 它抽象排序,想象then一个分号.
这实际上是为什么promises非常有用 - 你异步挂钩,就像你从你返回2那样then可以返回一个$.ajax调用,而链只会在ajax调用完成时发生.