我有两个承诺,用于抽象出我在使用Typescript编写的移动应用程序中的所有蓝牙扫描逻辑,用于Nativescript。我从我导入HomeComponent的函数返回了承诺。我希望我的HomeComponent中的then
仅在我的扫描例程中的所有逻辑都完成后运行,此时它会在扫描开始后立即运行。
import * as dialogs from "ui/dialogs";
import * as bluetooth from "nativescript-bluetooth";
var devices: Array<bluetooth.Peripheral>;
var _peripheral: bluetooth.Peripheral;
export function scan() {
return bluetooth.hasCoarseLocationPermission().then(
(granted) => {
if (!granted) {
bluetooth.requestCoarseLocationPermission();
} else {
bluetooth.scan({
}).then(() => {
console.log("scanning complete");
if (this.devices == undefined) {
return null;
}
console.log("2"); // ************** SECOND ****************
}, (err) => {
console.log("error while scanning: " + err);
});
}
});
}
console.log("1"); // ************** FIRST ****************
this._ble.scan().then(
// Log the fulfillment value
function (val) {
console.log("3"); // ************** THIRD ****************
_this.addClicked = toggleAdd(_this.page, _this, _this.addClicked); //toggle button
_this.Connect(val);
})
如何按顺序运行?
在回复重复的评论时,链接的答案似乎是多个,然后在彼此之后执行。我的问题是关于不同层面的问题,例如:我希望HomeComponent then
在ble.scan then
之后执行。在链接的答案中,它在同一级别上是多个?
所以我希望我的代码中的3个console.log按顺序打印出来,即1,2,3,不管任何调用等等多长时间。我目前正在获得1,3,2 - 即,一旦创建了te promise,就会调用第三个日志,而不是在它已经解决时。
更新
从链接问题中得到确切的例子,我有:
test() {
addElement("first")
.then(
function (val){
addElement("second");
console.log("second.");
})
.then(
function (val){
addElement("third");
console.log("third.");
});
}
export function addElement(elementText){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log(elementText);
resolve();
}, Math.random() * 2000);
});
}
我希望打印出这些函数first, second., second, third., third
。但是,我得到了:
JS:首先 JS:第二名。 JS:第三名。 JS:第三名 JS:第二次
如何在被叫承诺后执行then
&#39;然后完成了?