如何获取console.log()
输出的变量的字符串表示形式?
例如
const myFunc = async () => 'my string';
ret = myFunc();
console.log(ret); // Promise { 'my string' }
stringRepresentation = ret.someMethod(); // is there a method or some other way?
console.assert(stringRepresentation === "Promise { 'my string' }");
我主要是想在Node.js中运行它(但也好奇在浏览器中运行时是否有可能)。
答案 0 :(得分:3)
Node.js控制台实现使用util.inspect
来字符串化对象输出:
console.assert(util.inspect(ret) === "Promise { 'my string' }");
断言诺言Promise { 'my string' }
是不安全的,因为这样不必要地表示了诺言。在REPL中,它将是:
Promise {
'my string',
domain:
Domain {
domain: null,
_events: { error: [Function: debugDomainError] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
即使浏览器存在util
polyfill,它也不能用于同步化承诺,因为无法检查本机承诺,只能与then
或catch
链接。 Node.js uses native bindings检查ES6承诺。
答案 1 :(得分:0)
这是针对您的问题的一种破解方法,将适用于浏览器和Node,
function assertPromise(promiseVal, stringVal) {
promiseVal()
.then(str => {
let stringRepresentation = `Promise { '${str}' }`;
console.assert(stringRepresentation === stringVal);
});
}
const myFunc = async () => 'my string';
ret = myFunc();
console.log(ret); // Promise { 'my string' }
assertPromise(myFunc, "Promise { 'my string' }"); // Assert to TRUE