Javascript承诺语法差异?

时间:2018-05-24 14:36:51

标签: javascript node.js

我对如何使用javascript承诺毫无疑问。我已经用以下基本格式学习它,这是可以理解的。

var dopromise = new Promise (function(resolve,reject){

let isclean=true;

if(isclean){
   resolve('done');
 }

else
{
    reject();
}
});
dopromise.then(function(done){
     console.log()
}).catch(function(){
 console.log()
)}

但我不能正确理解承诺如何在下面的代码场景中起作用。没有细节,代码看起来更简单。我错过了什么吗?

例如

navigator.mediaDevices.getUserMedia({
                 video: true;
 })
  .then(function(stream){
       alice.addStream(stream);
       return alice.createOffer();
  })

3 个答案:

答案 0 :(得分:3)

getUserMedia会返回已创建的Promise。在您的第一个示例中,您手动创建Promise以使异步生成。

答案 1 :(得分:1)

语法是一样的。在.then()之前的任何内容必须产生Promise。在您的情况下,您明确地创建了Promise。在

的情况下
navigator.mediaDevices.getUserMedia({
    video: true;
})

getUserMedia()将对象作为参数并返回Promise

据我所知,其余的不是合法的JavaScript语法。你可以做到

.then(function(stream){
   alice.addStream(stream);
   return alice.createOffer();
})

或与ES6

.then((stream) => {
   alice.addStream(stream);
   return alice.createOffer();
})

答案 2 :(得分:-2)

非常一般/(计算机)外行人的术语承诺是被执行的函数" asynchrounsly"因此,当他们返回任何信息时,应该有一些地方可以捕获它。

返回的信息由"回调函数"捕获。称为然后

这个回调是自动调用的(通过javascript引擎)和"采用函数"作为参数,然后自动再次调用:)

所以,如果我有一段像这样的代码

somePromise().then(function() { console.log('2 - Promise returned 
something, executing in a separate thread') });

console.log('1 - This is executed in the main thread');

输出技术上是:

1 - 这在主线程中执行 2 - Promise返回在单独的线程中执行的东西

因为承诺可能需要很长时间才能返回,具体取决于它正在做多少工作,并且你不希望主线程等待那么长时间。