gpt4 book ai didi

javascript - promise 中的 return 语句

转载 作者:行者123 更新时间:2023-11-29 19:38:26 24 4
gpt4 key购买 nike

我正在学习 Promises(来自 this shim 的 vanilla es6 promises)并且我有 2 个函数,每个函数都返回一个新的 Promise 和一个名为 magic() 的第三个函数,它调用2 个函数并返回一个 Promise。

示例代码:

var CreatorX = {
"create": function() {
var p = new Promise(function(resolve, reject) {
window.setTimeout(function() {
window.console.log("created");
resolve(22);
}, 100);
});
return p;
}
};

var CreatorY = {
"create": function(id) {
window.console.log("id " + id);
var p = new Promise(function(resolve, reject) {
window.setTimeout(function() {
resolve(2244);
}, 5);
});
return p;
}
};

神奇的是:

function magic() {
return CreatorX.create().then(function(d) {
CreatorY.create(d); // shouldn't it be 'return CreatorY...'?
});
}

var r = magic();
r.then(function() {
console.log("Done");
}, function(err){console.error("oops")});

我的问题是,为什么这样做有效?我在魔术函数中的 CreatorY.create(d) 行没有 return 语句,但它似乎有效。 return 应该在那里吗?它起作用只是巧合吗?

最佳答案

当您从 Promise 函数返回某些内容时,promise 将使用您返回的值进行解析。 promise 函数的返回值将传递给链式 promise 函数。

在您的情况下,您没有明确返回任何内容。因此,JavaScript 将使用 undefined 解析 promise,这将可用于

function() {
console.log("Done");
}

函数。但是您忽略了先前 promise 的已解决值(value)。如果你真的想使用它,那么将函数更改为

function(result) {
console.log(result);
}

现在您将能够看到实际解析的值。

关于javascript - promise 中的 return 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431642/

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