我对如何使用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();
})
答案 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返回在单独的线程中执行的东西
因为承诺可能需要很长时间才能返回,具体取决于它正在做多少工作,并且你不希望主线程等待那么长时间。