gpt4 book ai didi

javascript 链接 promise 澄清

转载 作者:行者123 更新时间:2023-11-28 18:30:01 25 4
gpt4 key购买 nike

我正在尝试理解 JavaScript 中 Promise 的概念。

我看过这段代码:

new Promise(function(res,rej) {
res("aaa");
})
.then(function(result) {
console.log(result);
return "bbb";
})
.then(function(result) {
console.log(result);
return "ccc";
})
.then(function(result) {
console.log(result);
});

它打印:

 aaa

bbb

ccc

到控制台日志。

几个问题:

  1. then() 方法的第一个参数是一个将作为 resolve() 方法运行的函数吗?

  2. then() 方法还返回一个值,该值是一个 Promise,并且该 Promise 与其链接到的 Promise(其父级)是同一个 Promise 仅其resolve()方法的值是then()内的resolve()方法返回的值?

  3. 这个 promise 是:

    var myPromise = new Promise(function(res,rej) {
    res("aaa");
    })
    .then(function(result) {
    console.log(result);
    return "bbb";
    })

与下面的 promise 等效吗?

var myPromise = new Promise(function(res,rej) {
res("bbb");
})

此外,当 then() 接受 promise 时会发生什么?

像这个例子吗?

var firstMethod = function() {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('first method completed');
resolve({data: '123'});
}, 2000);
});
return promise;
};


var secondMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('second method completed');
resolve({newData: someStuff.data + ' some more data'});
}, 2000);
});
return promise;
};

var thirdMethod = function(someStuff) {
var promise = new Promise(function(resolve, reject){
setTimeout(function() {
console.log('third method completed');
resolve({result: someStuff.newData});
}, 3000);
});
return promise;
};

firstMethod()
.then(secondMethod)
.then(thirdMethod);

最佳答案

  1. then 方法的第一个参数是解析函数,第二个参数是拒绝函数。

var resolvedPromise = new Promise(function(res,rej){ res({data: 7}) });
var rejectedPromise = new Promise(function(res,rej){ rej('error!!!!') });
resolvedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });
rejectedPromise.then(function(res){ console.log('resolved:' + JSON.stringify(res)); }, function (err){ console.log('rejected:' + err); });

  • then 方法根据前一个 Promise 的返回类型返回一个 Promise。
  • var promise = new Promise(function(res,rej){ res({data: 7}) });
    promise.
    then(function(res){ console.log(res); return res.data; }).
    then(function(res){ console.log(res); return res + 1; }).
    then(function(res){ console.log(res);});

  • 没有。第一个代码将记录“aaa”并返回带有“bbb”的 promise ,而第二个代码将返回“bbb”而不记录“aaa”;
  • 关于javascript 链接 promise 澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38245252/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com