Насколько я знаю, каждый метод, определенный в интерфейсе, неявно abstract
(и public
). Но если вы объявите свой класс реализации как abstract
, вы можете пропустить реализацию одного или нескольких методов, определенных в реализованном интерфейсе.
abstract class Sphere implements Sheet {
public double computeArea() {
// do something
}
// skip computePerimeter():
// public double computerPerimeter();
}
То, что я узнаю об обещаниях, должно использовать его только в качестве возвращаемых значений , стараются не ссылаться на них , если это возможно. асинхронный/ждавший синтаксис особенно практичен для этого. Сегодня все последние браузеры и узел поддерживают его: https://caniuse.com/#feat=async-functions, простое поведение, и код похож на читающий синхронный код, забудьте об обратных вызовах...
В случаях я действительно должен сослаться, обещания состоят в том, когда создание и разрешение происходят в местах independent/not-related. Так вместо этого искусственная ассоциация и вероятно слушатель события только для разрешения "удаленного" обещания я предпочитаю выставлять обещание как Задержанный, который следующий код реализует его в допустимом транссложенном es5
/**
* Promise like object that allows to resolve it promise from outside code. Example:
*
```
class Api {
fooReady = new Deferred<Data>()
private knower() {
inOtherMoment(data=>{
this.fooReady.resolve(data)
})
}
}
```
*/
var Deferred = /** @class */ (function () {
function Deferred(callback) {
var instance = this;
this.resolve = null;
this.reject = null;
this.status = 'pending';
this.promise = new Promise(function (resolve, reject) {
instance.resolve = function () { this.status = 'resolved'; resolve.apply(this, arguments); };
instance.reject = function () { this.status = 'rejected'; reject.apply(this, arguments); };
});
if (typeof callback === 'function') {
callback.call(this, this.resolve, this.reject);
}
}
Deferred.prototype.then = function (resolve) {
return this.promise.then(resolve);
};
Deferred.prototype.catch = function (r) {
return this.promise.catch(r);
};
return Deferred;
}());
, формируют мой проект машинописного текста:
Для более сложных случаев я часто использую их парень маленькие утилиты обещания без зависимостей, протестированных и введенных. p-карта несколько раз была полезна. Я думаю, что он покрыл большинство вариантов использования:
https://github.com/sindresorhus? utf8 = % E2%9C%93& tab=repositories& q=promise& type=source& язык =
Решение:
можно поместить промежуточные значения в объем в немного позже 'затем', функция явно, при помощи 'связывают'. Это - хорошее решение, которое не требует изменения, как работают Обещания, и только требует, чтобы строка или два из кода распространили значения точно так же, как ошибки уже распространены.
Вот полный пример:
// Get info asynchronously from a server
function pGetServerInfo()
{
// then value: "server info"
} // pGetServerInfo
// Write into a file asynchronously
function pWriteFile(path,string)
{
// no then value
} // pWriteFile
// The heart of the solution: Write formatted info into a log file asynchronously,
// using the pGetServerInfo and pWriteFile operations
function pLogInfo(localInfo)
{
var scope={localInfo:localInfo}; // Create an explicit scope object
var thenFunc=p2.bind(scope); // Create a temporary function with this scope
return (pGetServerInfo().then(thenFunc)); // Do the next 'then' in the chain
} // pLogInfo
// Scope of this 'then' function is {localInfo:localInfo}
function p2(serverInfo)
{
// Do the final 'then' in the chain: Writes "local info, server info"
return pWriteFile('log',this.localInfo+','+serverInfo);
} // p2
Это решение может быть вызвано следующим образом:
pLogInfo("local info").then().catch(err);
(Примечание: более сложная и полная версия этого решения была протестирована, но не эта версия в качестве примера, таким образом, это могло иметь ошибку.)