为什么在已履行的承诺上有未定义?
Why there is undefined on fulfilled promise?
你能给我解释一下吗?
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
if(true) {
resolve('succes')
} else {
reject('failure')
}
}, 4000)
})
promise1.then(result => console.log(result))
为什么在那之后我在控制台上得到 'succes' 和类似的东西
Promise {<fulfilled>: undefined}
如果我的 promise 返回 'succes' 字符串值,为什么会出现 undefined?这是因为 setTimeout 嵌套?我该如何解决这个问题?
公平地说,您没有显示您获得的代码
Promise {<fulfilled>: undefined}
但我想它可能看起来像这样:
promise1.then(result => {
console.log(result)
console.log(promise1); // this line here
})
如果改为这样做:
promise1.then(result => {
console.log(result)
console.log(promise1);
return result; // now this line here
})
然后你会看到:
Promise {<fulfilled>: "succes"}
@
马特乌斯 W
1-第一条日志'成功'来自您所写的'console.log(result)'
2 - 第二条日志 'Promise {: undefined}' 引用 'promise1.then(result => console.log(result))
',因为 'then' 函数 return 本身就是一个解决的承诺
你 return 在里面的结果(在你的情况下你 return 里面什么都没有 然后 )。
为了确保验证以下代码:
promise1.then(result => console.log(result)).then(result1 => {})
你会得到如下结果
succes
undefined
Promise {<fulfilled>: undefined}
成功后的undefined就是你在'Promise {: undefined}'
中找到的那个
这里对应result1.
不要与您在此处看到的 Promise {<fulfilled>: undefined}
混淆(我的代码的结果),因为这是指 second 然后我链接到您的 然后
总结:您可能会感到困惑,并认为您在控制台中看到的 Promise {<fulfilled>: undefined}
指的是您 promise1常量。
不,不是,它是 then 函数的 return。
通过进行以下调整:
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
if(true) {
resolve('succes')
} else {
reject('failure')
}
}, 4000)
})
promise1.then(result => {
console.log(result);
return result;
})
您将在开发工具上同时拥有日志和承诺 return 价值;
为什么?
undefined
是隐式 return 值回调(return;
)的结果,当函数没有显式 return 任何东西时,js 引擎将添加隐式 return
语句到函数体的末尾。
你能给我解释一下吗?
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
if(true) {
resolve('succes')
} else {
reject('failure')
}
}, 4000)
})
promise1.then(result => console.log(result))
为什么在那之后我在控制台上得到 'succes' 和类似的东西
Promise {<fulfilled>: undefined}
如果我的 promise 返回 'succes' 字符串值,为什么会出现 undefined?这是因为 setTimeout 嵌套?我该如何解决这个问题?
公平地说,您没有显示您获得的代码
Promise {<fulfilled>: undefined}
但我想它可能看起来像这样:
promise1.then(result => {
console.log(result)
console.log(promise1); // this line here
})
如果改为这样做:
promise1.then(result => {
console.log(result)
console.log(promise1);
return result; // now this line here
})
然后你会看到:
Promise {<fulfilled>: "succes"}
@ 马特乌斯 W
1-第一条日志'成功'来自您所写的'console.log(result)'
2 - 第二条日志 'Promise {: undefined}' 引用 'promise1.then(result => console.log(result))
',因为 'then' 函数 return 本身就是一个解决的承诺
你 return 在里面的结果(在你的情况下你 return 里面什么都没有 然后 )。
为了确保验证以下代码:
promise1.then(result => console.log(result)).then(result1 => {})
你会得到如下结果
succes
undefined
Promise {<fulfilled>: undefined}
成功后的undefined就是你在'Promise {: undefined}'
中找到的那个这里对应result1.
不要与您在此处看到的 Promise {<fulfilled>: undefined}
混淆(我的代码的结果),因为这是指 second 然后我链接到您的 然后
总结:您可能会感到困惑,并认为您在控制台中看到的 Promise {<fulfilled>: undefined}
指的是您 promise1常量。
不,不是,它是 then 函数的 return。
通过进行以下调整:
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
if(true) {
resolve('succes')
} else {
reject('failure')
}
}, 4000)
})
promise1.then(result => {
console.log(result);
return result;
})
您将在开发工具上同时拥有日志和承诺 return 价值;
为什么?
undefined
是隐式 return 值回调(return;
)的结果,当函数没有显式 return 任何东西时,js 引擎将添加隐式 return
语句到函数体的末尾。