如何更改jquery promise链中的已解析值

时间:2017-02-14 16:41:40

标签: javascript jquery promise jquery-deferred

我试图编写一个可以在更改已解析值的承诺链中使用的函数。

下面,我希望函数getAndChangeValue()从" Hello"更改已解析的参数。到"再见"。请帮忙!我似乎无法理解它。 : - )

https://plnkr.co/edit/RL1XLeQdkZ8jd8IezMYr?p=preview

getAndChangeValue().then(function(arg) {
    console.log(arg) // I want this to say "Bye"
});


function getAndChangeValue() {

    var promise = getValue()
    promise.then(function(arg) {
        console.log('arg:', arg) // says "Hello"

        // do something here to change it to "Bye"
    })
    return promise
}

function getValue() { // returns promise

    return $.ajax({
        url: "myFile.txt",
        type: 'get'

    });
}

2 个答案:

答案 0 :(得分:2)

您可以在传递给then()的函数中返回您喜欢的任何值,但是您必须返回then()而不是原始promise返回的新承诺:

function getAndChangeValue() {
    return getValue().then(function(arg) {
        return "Bye";
    }
}

答案 1 :(得分:0)

如果您使用BluebirdJS,则可以添加.return(value)

E.g:

var firstPromise = new Promise(function (resolve, reject) { 
   return resolve('FIRST-VALUE'); 
})
.then(function (response) {
   console.log(response); // FIRST-VALUE
   var secondPromise = new Promise(function (resolve) { 
      resolve('SECOND-VALUE');
   });

   // Here we are changing the return value from 'SECOND-VALUE' to 'FIRST-VALUE'
   return secondPromise.return(response); 
})
.then(function (response) {
   console.log(response); // FIRST-VALUE
})