- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 routerCanDeactivate
我的应用程序中组件的功能。简单的使用方法如下:
routerCanDeactivate() {
return confirm('Are you sure you want to leave this screen?');
}
我唯一的问题是它很丑。它只是使用浏览器生成的确认提示。我真的很想使用自定义模式,例如 Bootstrap 模式。我让 Bootstrap 模式根据他们单击的按钮返回真值或假值。 routerCanDeactivate
我正在实现可以接受真/假值或解析为真/假的 promise 。
这是具有 routerCanDeactivate
的组件的代码方法:
export class MyComponent implements CanDeactivate {
private promise: Promise<boolean>;
routerCanDeactivate() {
$('#modal').modal('show');
return this.promise;
}
handleRespone(res: boolean) {
if(res) {
this.promise.resolve(res);
} else {
this.promise.reject(res);
}
}
}
当我的 TypeScript 文件编译时,我在终端中收到以下错误:
error TS2339: Property 'resolve' does not exist on type 'Promise<boolean>'.
error TS2339: Property 'reject' does not exist on type 'Promise<boolean>'.
当我尝试离开组件时,模式启动,但随后组件停用并且不等待 promise 解析。
我的问题是尝试计算出 Promise,以便 routerCanDeactivate
方法等待 promise 解决。有没有错误说没有'resolve'
的原因?属性(property) Promise<boolean>
?如果我能解决那部分问题,我必须在 routerCanDeactivate
中返回什么?方法,以便它等待 promise 的解决/拒绝?
供引用,here is the DefinitelyTyped Promise definition .那里显然有解决和拒绝功能。
感谢您的帮助。
更新
这是更新后的文件,其中初始化了 Promise:
private promise: Promise<boolean> = new Promise(
( resolve: (res: boolean)=> void, reject: (res: boolean)=> void) => {
const res: boolean = false;
resolve(res);
}
);
和 handleResponse
功能:
handleResponse(res: boolean) {
console.log('res: ', res);
this.promise.then(res => {
console.log('res: ', res);
});
}
它仍然不能正常工作,但模式出现并等待响应。当你说是离开时,它会留在组件上。另外,第一个 res
记录的是组件返回的正确值,但内部的值是 .then
函数与传递给 handleResponse
的函数不同功能。
更多更新
在做了更多阅读之后,似乎在 promise
中声明,它设置了 resolve
值,以及 promise
无论如何都有那个值(value)。所以即使后来我调用.then
方法,它不会改变 promise
的值而且我不能让它成为现实并切换组件。有没有办法制作promise
没有默认值,它必须等到它的 .then
方法被调用?
更新的功能:
private promise: Promise<boolean> = new Promise((resolve, reject) => resolve(false) );
handleResponse(res: any) {
this.promise.then(val => {
val = res;
});
}
再次感谢您的帮助。
最后更新
看了很多建议后,我决定创建一个 Deferred
类(class)。它工作得很好,但是当我执行 deferred.reject(anyType)
时,我在以下控制台中收到错误:
EXCEPTION: Error: Uncaught (in promise): null
当我传入 null
时,同样的事情发生了, 一个 string
, 或 boolean
.试图提供 catch
Deferred
中的函数类(class)不成功。
延迟类(class)
export class Deferred<T> {
promise: Promise<T>;
resolve: (value?: T | PromiseLike<T>) => void;
reject: (reason?: any) => void;
constructor() {
this.promise = new Promise<T>((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
}
}
最佳答案
我不熟悉 bootstrap modal api,但我希望有一种方法可以在创建它时以某种方式绑定(bind)到关闭事件。
export class MyComponent implements CanDeactivate {
routerCanDeactivate(): Promise<boolean> {
let $modal = $('#modal').modal();
return new Promise<boolean>((resolve, reject) => {
$modal.on("hidden.bs.modal", result => {
resolve(result.ok);
});
$modal.modal("show");
});
}
}
您正在尝试使用 Promise
,例如 Deferred
。如果您想要那种 API,请自己编写一个 Deferred
类。
class Deferred<T> {
promise: Promise<T>;
resolve: (value?: T | PromiseLike<T>) => void;
reject: (reason?: any) => void;
constructor() {
this.promise = new Promise<T>((resolve, reject) => {
this.resolve = resolve;
this.reject = reject;
});
}
}
export class MyComponent implements CanDeactivate {
private deferred = new Deferred<boolean>();
routerCanDeactivate(): Promise<boolean> {
$("#modal").modal("show");
return this.deferred.promise;
}
handleRespone(res: boolean): void {
if (res) {
this.deferred.resolve(res);
} else {
this.deferred.reject(res);
}
}
}
关于typescript - Angular 2 和 TypeScript promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36609998/
如何从 promise 中退出 promise ? perl6 文档没有提供简单的方法。例如: my $x = start { loop { # loop forever until "qui
我的用户 Controller 中有一个索引操作,其中我试图连续做两件事,并且在它们都有机会完成之前不执行所需的 res.json() 方法。 我有一个加入用户的友谊加入模型。一列是 friender
请帮我解释一下为什么日志结果有两种不同: 方式 1:每 1 秒顺序记录一次 方式 2:1 秒后记录所有元素。 // Way 1 let sequence = Promise.resolve(); [1
我的问题很简单。 Promise.all() 方法可以返回 Promise 吗?让我解释一下: function simpleFunction() { let queue = [];
我正在使用 Promise 从存储中读取文件并转换为 base64 字符串。我有图像数组,使用 RNFS 读取图像 const promise_Images = _Images.map(async (
如果使用非空数组调用 Promise.all 或 Promise.race,它们将返回一个待处理的 Promise: console.log(Promise.all([1])); // prints
Promise.all 是否可以在没有包装 promise 的情况下返回链的最后一个值? 如果不使用 await,它在我的上下文中不起作用 没有包装的例子: function sum1(x){ r
我一直在玩 promise,通常能想出如何处理好它们,但在这种情况下,我不知道如何删除一个 promise-wrapping level。 代码如下: let promise2 = promise1.
考虑以下嵌套的Promises结构: const getData = async() => { const refs = [{ name: "John33", age: 3
我已经阅读了 Promise/A+ 规范,但据我了解,还有诸如 Promise/A 和 Promise 之类的东西。它们之间有什么区别? Promise 和 Promise/A 规范也是如此吗?如果是
当我运行以下代码时: my $timer = Promise.in(2); my $after = $timer.then({ say "2 seconds are over!"; 'result'
以下简单的 promise 是发誓的,我不允许打破它。 my $my_promise = start { loop {} # or sleep x; 'promise re
我正在尝试扩展Promise: class PersistedPromise extends Promise { } 然后在派生类上调用静态resolve以直接创建一个已解决的Promise: Per
我有两个返回 promise 的函数,我独立使用它们作为: getLocal().then(...) 和 getWeb().then(...) 但是现在我遇到了一个奇怪的问题: 1) 我需要第三个
我不知道 promise.all 解决方案中的 promise.all 是否是一个好的实践。我不确定。 我需要从一组用户获取信息,然后通过此信息响应,我需要发送消息通知。 let userList =
我一直在尝试使用 queueMicrotask() 函数,但我没有弄清楚当回调是微任务时回调的优先级如何。查看以下代码: function tasksAndMicroTasks() { const
我一直在尝试使用 queueMicrotask() 函数,但我没有弄清楚当回调是微任务时回调的优先级如何。查看以下代码: function tasksAndMicroTasks() { const
今年早些时候,我在 Pharo Smalltalk 参与了一个 promise 项目。这个想法是为了实现以下行为: ([ 30 seconds wait. 4 ]promiseValue )then:
大家好,提前感谢您的帮助。 下面是我正在尝试做的事情 function1(){ throw some error(); } function2() { // dosomething suc
我有以下未解析的代码。f2 解决了,所以我不会添加该代码,它是 f1 我有问题。 我调用函数,它到达最里面如果,它调用函数“find”,它执行函数 findId,完美返回 Id,然后执行 editId
我是一名优秀的程序员,十分优秀!