Javascript 从承诺构造函数返回值

Javascript 从承诺构造函数返回值,javascript,promise,Javascript,Promise,考虑下面的两个例子 测试1 它什么也不输出 测试2 它输出: DATA: 123 VALUE: 456 承诺构造函数不在测试1中简单地解析返回值有哪些缺点或矛盾 为什么它必须是与测试2中不同的结果 我试图理解构造的承诺对象与当时的可启用对象有何不同。传递给promise的函数不是oncompleted或onRejected的回调。MDN将其称为执行器。将其视为promise试图捕获的异步上下文。从异步方法返回不起作用(或没有意义),因此必须调用resolve或reject。比如说 var re

考虑下面的两个例子

测试1 它什么也不输出

测试2 它输出:

DATA: 123
VALUE: 456
承诺构造函数不在测试1中简单地解析返回值有哪些缺点或矛盾

为什么它必须是与测试2中不同的结果


我试图理解构造的承诺对象与当时的可启用对象有何不同。

传递给
promise
的函数不是
oncompleted
onRejected
的回调。MDN将其称为执行器。将其视为promise试图捕获的异步上下文。从异步方法返回不起作用(或没有意义),因此必须调用
resolve
reject
。比如说

var returnVal = new Promise(function() {
     return setTimeout(function() {
         return 27;
     });
});
。。。无法按预期工作。如果要在异步调用完成之前从
执行器返回值,则无法重新解析该承诺

而且,它可能是模糊的,隐式
返回未定义位于函数末尾。考虑这些执行器的作用方式相同。

// A
function a() { return undefined; }

// B
function b() { }
您真正想用
未定义的
解析的
Promise
构造函数会告诉它什么

a() === b(); // true

值得一提的是,有一种速记方式可以用来返回已解决的承诺

简直成了

return Promise.resolve(123);

这是哪个
Promise
库?@jamice es6 Promise@jamice es6 Promise在NodeJS 4.1.1ok中,我想是这样,但不是100%(显然是为了能够等待异步
解析
调用)。退房如果你在寻找承诺和承诺之间的区别,请参阅。结果是相同的,但下面发生的事情却不同。第二个总是表现得更好。根据承诺的实现情况,第二种方法可以做得更好。流程是类似的(虽然它可能取决于实现,我已经在bluebird中进行了研究),但它跳过了一些不必要的步骤。
a() === b(); // true
return new Promise(function (resolve, reject) {
    resolve(123);
});
return Promise.resolve(123);