gpt4 book ai didi

Javascript(NodeJS) promise 未决?

转载 作者:行者123 更新时间:2023-11-29 21:11:54 25 4
gpt4 key购买 nike

function  f () {
return new Promise(function (resolve, reject) {

resolve(4);
})
}

function g () {
return f().then((res) => {return res;})

}

console.log(g());

返回 Promise { <pending> }

如果我返回 res (在当时)然后返回f() ,为什么输出不是 4

最佳答案

一个有效的答案是:

function f() {
return new Promise(function(resolve, reject) {

resolve(4);
})
}

function g() {
return f().then((res) => {
return res;
})
.then((res) =>{
console.log(res);
})

}
g()

为什么?任何时候你return从内部 then promise 中的语句,它将它传递给下一个语句(then 或 catch)。尝试注释掉 return res你会看到它打印出 undefined .

==============
但是,对于 ES7,我们可以使用 async/await .我们可以使用以下代码复制上面的内容:

function f() {
return new Promise(function(resolve, reject) {
resolve(4);
});
}

async function g() {
var a = await f();
// do something with a ...
console.log(a);
}

g();

重要的是要注意 console.log(g())仍然返回一个 promise 。这是因为在实际函数中 g ,解决 promise 会延迟,因此不会阻止我们其余代码的执行,但函数体可以利用 f 的返回值.

注意:要运行此程序,您需要 Node 7,并且应使用 --harmony-async-await 执行选项。

===========
编辑以包含新的代码片段
看下面的代码。您必须使用 then 来访问之前的对象 - 但是,在这种情况下,您访问它的位置取决于您。您可以调用 Promise.all 中的每个 promise , 在这种情况下 .then((userVictories) => ...).then(...)或一次 Promise.all返回。重要的是要注意 Promise.all 返回一次所有它包含 resolve 的 promise 。

var membersArray = groupFound.members;
Promise.all(membersArray.map((member) => {
return db.doneTodo.find({ 'victor._id': member._id }).then((userVictories) => {
return {
email: member.email,
victories: userVictories.length,
}
}).then(obj => {
/*
obj is each object with the signature:
{email: '', victories: ''}

calling this then is optional if you want to process each object
returned from '.then((userVictories) =>)'

NOTE: this statement is processed then *this* promise resolves

We can send an email to each user with an update
*/
});
}))
.then((arr) => {
/*
arr is an array of all previous promises in this case:
[{email: '', victories: ''}, {email: '', victories: ''}, ...]

NOTE: this statement is processed when all of the promises above resolve.

We can use the array to get the sum of all victories or the
user with the most victories
*/
})

关于Javascript(NodeJS) promise 未决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411142/

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