我试图编写一个可以在更改已解析值的承诺链中使用的函数。
下面,我希望函数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'
});
}
答案 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
})